diff options
Diffstat (limited to 'gcc/config/i386/i386.md')
-rw-r--r-- | gcc/config/i386/i386.md | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 8ae87644505..64edb555dfb 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -6530,7 +6530,7 @@ byte_xor_operation: } else { - sprintf (buffer, \"addl %s+[.-.L%d],%%0\", XSTR (operands[1], 0), INTVAL (operands[2])); + sprintf (buffer, \"addl %s+[.-%%P2],%%0\", XSTR (operands[1], 0)); output_asm_insn (buffer, operands); } RET; @@ -6547,7 +6547,7 @@ byte_xor_operation: output_asm_insn (AS1 (call,%P1), operands); if (! TARGET_DEEP_BRANCH_PREDICTION) { - ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", INTVAL (operands[1])); + ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", CODE_LABEL_NUMBER (operands[1])); } RET; }") @@ -6615,8 +6615,8 @@ byte_xor_operation: operands[5] = addr0; operands[6] = addr1; - operands[0] = gen_rtx (MEM, BLKmode, addr0); - operands[1] = gen_rtx (MEM, BLKmode, addr1); + operands[0] = change_address (operands[0], VOIDmode, addr0); + operands[1] = change_address (operands[1], VOIDmode, addr1); }") ;; It might seem that operands 0 & 1 could use predicate register_operand. @@ -7656,20 +7656,31 @@ byte_xor_operation: "* return AS1(call,__alloca);") (define_expand "allocate_stack" - [(set (reg:SI 7) - (minus:SI (reg:SI 7) (match_operand:SI 0 "general_operand" "")))] - "TARGET_STACK_PROBE" + [(set (match_operand:SI 0 "register_operand" "=r") + (minus:SI (reg:SI 7) (match_operand:SI 1 "general_operand" ""))) + (set (reg:SI 7) (minus:SI (reg:SI 7) (match_dup 1)))] + "TARGET_STACK_PROBE" " { #ifdef CHECK_STACK_LIMIT - if (GET_CODE (operands[0]) == CONST_INT - && INTVAL (operands[0]) < CHECK_STACK_LIMIT) + if (GET_CODE (operands[1]) == CONST_INT + && INTVAL (operands[1]) < CHECK_STACK_LIMIT) emit_insn (gen_subsi3 (stack_pointer_rtx, stack_pointer_rtx, - operands[0])); + operands[1])); else #endif emit_insn (gen_allocate_stack_worker (copy_to_mode_reg (SImode, - operands[0]))); + operands[1]))); + emit_move_insn (operands[0], virtual_stack_dynamic_rtx); + DONE; +}") + +(define_expand "nonlocal_goto_receiver" + [(const_int 0)] + "flag_pic" + " +{ + load_pic_register (1); DONE; }") |