This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi, I have updated my patch for divmod (attached), which was originally based on Kugan's patch. The patch transforms stmts with code TRUNC_DIV_EXPR and TRUNC_MOD_EXPR having same operands to divmod representation, so we can cse computation of mod. t1 = a TRUNC_DIV_EXPR b; t2 = a TRUNC_MOD_EXPR b is transformed to: complex_tmp = DIVMOD (a, b); t1 = REALPART_EXPR (complex_tmp); t2 = IMAGPART_EXPR (complex_tmp); * New hook divmod_expand_libfunc The rationale for introducing the hook is that different targets have incompatible calling conventions for divmod libfunc. Currently three ports define divmod libfunc: c6x, spu and arm. c6x and spu follow the convention of libgcc2.c:__udivmoddi4: return quotient and store remainder in argument passed as pointer, while the arm version takes two arguments and returns both quotient and remainder having mode double the size of the operand mode. The port should hence override the hook expand_divmod_libfunc to generate call to target-specific divmod. Ports should define this hook if: a) The port does not have divmod or div insn for the given mode. b) The port defines divmod libfunc for the given mode. The default hook default_expand_divmod_libfunc() generates call to libgcc2.c:__udivmoddi4 provided the operands are unsigned and are of DImode. Patch passes bootstrap+test on x86_64-unknown-linux-gnu and cross-tested on arm*-*-*. Bootstrap+test in progress on arm-linux-gnueabihf. Does this patch look OK ? Thanks, Prathamesh
Attachment:
divmod-part1_1.diff
Description: Text document
Attachment:
ChangeLog-part1
Description: Binary data
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |