diff options
author | Harald van Dijk <harald@gigawatt.nl> | 2011-08-17 09:28:24 +0800 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2011-08-17 09:28:24 +0800 |
commit | b5bda1d94f7a62d88c6a257a283426c16906c8cb (patch) | |
tree | 06613b5c3f6061702960e49dada94be9436241fc | |
parent | [SHELL] Fix klibc DEBUG compilation (diff) | |
download | dash-b5bda1d94f7a62d88c6a257a283426c16906c8cb.tar.gz dash-b5bda1d94f7a62d88c6a257a283426c16906c8cb.zip |
[ARITH] Avoid imaxdiv when only one of the results is wanted
dash rather pointlessly calls imaxdiv, only to discard one of its results. The call was already made conditional a while back because some systems don't have imaxdiv, but the generated code for the version with imaxdiv and the one with / and % is identical (with GCC 4.6.1 or ICC 12.0.2, with -O0, -O2 or -Os), so it could just as well go entirely to clean up the code a little bit. Signed-off-by: Harald van Dijk <harald@gigawatt.nl> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | src/arith_yacc.c | 9 |
3 files changed, 5 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog index b96e5b2..02bfda0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2011-07-26 Harald van Dijk <harald@gigawatt.nl> + + * Avoid imaxdiv when only one of the results is wanted. + 2010-07-09 maximilian attems <max@stro.at> * Fix klibc DEBUG compilation. diff --git a/configure.ac b/configure.ac index 7eae954..5cd6e95 100644 --- a/configure.ac +++ b/configure.ac @@ -85,7 +85,7 @@ AC_CHECK_DECL([PRIdMAX],, ]) dnl Checks for library functions. -AC_CHECK_FUNCS(bsearch faccessat getpwnam getrlimit imaxdiv isalpha killpg \ +AC_CHECK_FUNCS(bsearch faccessat getpwnam getrlimit isalpha killpg \ mempcpy \ sigsetmask stpcpy strchrnul strsignal strtod strtoimax \ strtoumax sysconf) diff --git a/src/arith_yacc.c b/src/arith_yacc.c index bf21830..1a087c3 100644 --- a/src/arith_yacc.c +++ b/src/arith_yacc.c @@ -94,22 +94,13 @@ static inline int higher_prec(int op1, int op2) static intmax_t do_binop(int op, intmax_t a, intmax_t b) { -#ifdef HAVE_IMAXDIV - imaxdiv_t div; -#endif - switch (op) { default: case ARITH_REM: case ARITH_DIV: if (!b) yyerror("division by zero"); -#ifdef HAVE_IMAXDIV - div = imaxdiv(a, b); - return op == ARITH_REM ? div.rem : div.quot; -#else return op == ARITH_REM ? a % b : a / b; -#endif case ARITH_MUL: return a * b; case ARITH_ADD: |