From cdb04b8418692622610b98288d6362347b75c184 Mon Sep 17 00:00:00 2001 From: uros Date: Thu, 17 Apr 2008 18:38:35 +0000 Subject: * config/i386/i386.md (addti3 splitter): Pass arrays of 3 operands to split_ti instead of three separate calls with single member arrays. (subti3 splitter): Ditto. (adddi3 splitter): Ditto with split_di. (subdi3 splitter): Ditto. (negti2 splitter): Pass arrays of 2 operands to split_ti instead of two separate calls with single member arrays. Swap match_dup operands 1 and 2 to better fit into the array. (negdi2 splitter): Ditto with split_di. (movdfcc splitter): Pass arrays of 2 operands to split_di instead of two separate calls with single member arrays. Swap match_dup operands 6 and 7 to better fit into the array. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@134403 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 15 ++++++++++++ gcc/config/i386/i386.md | 63 ++++++++++++++++++++----------------------------- 2 files changed, 41 insertions(+), 37 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 26258e4898f..89983b940d3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,18 @@ +2008-04-17 Uros Bizjak + + * config/i386/i386.md (addti3 splitter): Pass arrays of 3 operands + to split_ti instead of three separate calls with single member arrays. + (subti3 splitter): Ditto. + (adddi3 splitter): Ditto with split_di. + (subdi3 splitter): Ditto. + (negti2 splitter): Pass arrays of 2 operands to split_ti instead of + two separate calls with single member arrays. Swap match_dup + operands 1 and 2 to better fit into the array. + (negdi2 splitter): Ditto with split_di. + (movdfcc splitter): Pass arrays of 2 operands to split_di instead of + two separate calls with single member arrays. Swap match_dup operands + 6 and 7 to better fit into the array. + 2008-04-17 H.J. Lu * config/i386/i386.c (sse_builtin_type): New. diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index d09eb260f4e..102f7f7e96d 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -2127,7 +2127,7 @@ && !x86_64_immediate_operand (operands[1], DImode) && 1" [(set (match_dup 0) (match_dup 1)) (set (match_dup 2) (match_dup 3))] - "split_di (operands + 1, 1, operands + 2, operands + 3); + "split_di (&operands[1], 1, &operands[2], &operands[3]); operands[1] = gen_lowpart (DImode, operands[2]); operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (DImode, stack_pointer_rtx, GEN_INT (4))); @@ -2142,7 +2142,7 @@ && !x86_64_immediate_operand (operands[1], DImode)" [(set (match_dup 0) (match_dup 1)) (set (match_dup 2) (match_dup 3))] - "split_di (operands + 1, 1, operands + 2, operands + 3); + "split_di (&operands[1], 1, &operands[2], &operands[3]); operands[1] = gen_lowpart (DImode, operands[2]); operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (DImode, stack_pointer_rtx, GEN_INT (4))); @@ -2367,7 +2367,7 @@ && !x86_64_immediate_operand (operands[1], DImode) && 1" [(set (match_dup 2) (match_dup 3)) (set (match_dup 4) (match_dup 5))] - "split_di (operands, 2, operands + 2, operands + 4);") + "split_di (&operands[0], 2, &operands[2], &operands[4]);") (define_split [(set (match_operand:DI 0 "memory_operand" "") @@ -2378,7 +2378,7 @@ && !x86_64_immediate_operand (operands[1], DImode)" [(set (match_dup 2) (match_dup 3)) (set (match_dup 4) (match_dup 5))] - "split_di (operands, 2, operands + 2, operands + 4);") + "split_di (&operands[0], 2, &operands[2], &operands[4]);") (define_insn "*swapdi_rex64" [(set (match_operand:DI 0 "register_operand" "+r") @@ -5522,9 +5522,7 @@ (match_dup 4)) (match_dup 5))) (clobber (reg:CC FLAGS_REG))])] - "split_ti (operands+0, 1, operands+0, operands+3); - split_ti (operands+1, 1, operands+1, operands+4); - split_ti (operands+2, 1, operands+2, operands+5);") + "split_ti (&operands[0], 3, &operands[0], &operands[3]);") ;; %%% splits for addsidi3 ; [(set (match_operand:DI 0 "nonimmediate_operand" "") @@ -5561,9 +5559,7 @@ (match_dup 4)) (match_dup 5))) (clobber (reg:CC FLAGS_REG))])] - "split_di (operands+0, 1, operands+0, operands+3); - split_di (operands+1, 1, operands+1, operands+4); - split_di (operands+2, 1, operands+2, operands+5);") + "split_di (&operands[0], 3, &operands[0], &operands[3]);") (define_insn "adddi3_carry_rex64" [(set (match_operand:DI 0 "nonimmediate_operand" "=rm,r") @@ -7298,9 +7294,7 @@ (plus:DI (ltu:DI (reg:CC FLAGS_REG) (const_int 0)) (match_dup 5)))) (clobber (reg:CC FLAGS_REG))])] - "split_ti (operands+0, 1, operands+0, operands+3); - split_ti (operands+1, 1, operands+1, operands+4); - split_ti (operands+2, 1, operands+2, operands+5);") + "split_ti (&operands[0], 3, &operands[0], &operands[3]);") ;; %%% splits for subsidi3 @@ -7333,9 +7327,7 @@ (plus:SI (ltu:SI (reg:CC FLAGS_REG) (const_int 0)) (match_dup 5)))) (clobber (reg:CC FLAGS_REG))])] - "split_di (operands+0, 1, operands+0, operands+3); - split_di (operands+1, 1, operands+1, operands+4); - split_di (operands+2, 1, operands+2, operands+5);") + "split_di (&operands[0], 3, &operands[0], &operands[3]);") (define_insn "subdi3_carry_rex64" [(set (match_operand:DI 0 "nonimmediate_operand" "=rm,r") @@ -10193,20 +10185,19 @@ "TARGET_64BIT && reload_completed" [(parallel [(set (reg:CCZ FLAGS_REG) - (compare:CCZ (neg:DI (match_dup 2)) (const_int 0))) - (set (match_dup 0) (neg:DI (match_dup 2)))]) + (compare:CCZ (neg:DI (match_dup 1)) (const_int 0))) + (set (match_dup 0) (neg:DI (match_dup 1)))]) (parallel - [(set (match_dup 1) + [(set (match_dup 2) (plus:DI (plus:DI (ltu:DI (reg:CC FLAGS_REG) (const_int 0)) (match_dup 3)) (const_int 0))) (clobber (reg:CC FLAGS_REG))]) (parallel - [(set (match_dup 1) - (neg:DI (match_dup 1))) + [(set (match_dup 2) + (neg:DI (match_dup 2))) (clobber (reg:CC FLAGS_REG))])] - "split_ti (operands+1, 1, operands+2, operands+3); - split_ti (operands+0, 1, operands+0, operands+1);") + "split_ti (&operands[0], 2, &operands[0], &operands[2]);") (define_expand "negdi2" [(parallel [(set (match_operand:DI 0 "nonimmediate_operand" "") @@ -10230,20 +10221,19 @@ "!TARGET_64BIT && reload_completed" [(parallel [(set (reg:CCZ FLAGS_REG) - (compare:CCZ (neg:SI (match_dup 2)) (const_int 0))) - (set (match_dup 0) (neg:SI (match_dup 2)))]) + (compare:CCZ (neg:SI (match_dup 1)) (const_int 0))) + (set (match_dup 0) (neg:SI (match_dup 1)))]) (parallel - [(set (match_dup 1) + [(set (match_dup 2) (plus:SI (plus:SI (ltu:SI (reg:CC FLAGS_REG) (const_int 0)) (match_dup 3)) (const_int 0))) (clobber (reg:CC FLAGS_REG))]) (parallel - [(set (match_dup 1) - (neg:SI (match_dup 1))) + [(set (match_dup 2) + (neg:SI (match_dup 2))) (clobber (reg:CC FLAGS_REG))])] - "split_di (operands+1, 1, operands+2, operands+3); - split_di (operands+0, 1, operands+0, operands+1);") + "split_di (&operands[0], 2, &operands[0], &operands[2]);"); (define_insn "*negdi2_1_rex64" [(set (match_operand:DI 0 "nonimmediate_operand" "=rm") @@ -13225,7 +13215,7 @@ (lshiftrt:SI (match_dup 3) (minus:QI (const_int 32) (match_dup 2))))) (clobber (reg:CC FLAGS_REG))])] - "split_di (operands, 1, operands + 4, operands + 5);") + "split_di (&operands[0], 1, &operands[4], &operands[5]);") (define_insn "*rotlsi3_1_one_bit_rex64" [(set (match_operand:DI 0 "nonimmediate_operand" "=rm") @@ -13461,7 +13451,7 @@ (ashift:SI (match_dup 3) (minus:QI (const_int 32) (match_dup 2))))) (clobber (reg:CC FLAGS_REG))])] - "split_di (operands, 1, operands + 4, operands + 5);") + "split_di (&operands[0], 1, &operands[4], &operands[5]);") (define_insn "*rotrdi3_1_one_bit_rex64" [(set (match_operand:DI 0 "nonimmediate_operand" "=rm") @@ -19467,14 +19457,13 @@ [(set (match_dup 2) (if_then_else:SI (match_op_dup 1 [(match_dup 4) (const_int 0)]) (match_dup 5) - (match_dup 7))) + (match_dup 6))) (set (match_dup 3) (if_then_else:SI (match_op_dup 1 [(match_dup 4) (const_int 0)]) - (match_dup 6) + (match_dup 7) (match_dup 8)))] - "split_di (operands+2, 1, operands+5, operands+6); - split_di (operands+3, 1, operands+7, operands+8); - split_di (operands, 1, operands+2, operands+3);") + "split_di (&operands[2], 2, &operands[5], &operands[7]); + split_di (&operands[0], 1, &operands[2], &operands[3]);") (define_insn "*movxfcc_1" [(set (match_operand:XF 0 "register_operand" "=f,f") -- cgit v1.2.1