summaryrefslogtreecommitdiff
path: root/gcc/config/i386/i386.md
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/i386/i386.md')
-rw-r--r--gcc/config/i386/i386.md33
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;
}")