diff options
author | Richard Henderson <rth@gcc.gnu.org> | 1999-04-17 12:15:29 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 1999-04-17 12:15:29 -0700 |
commit | d119f84ce709de6c2027065de97d2dd13ca57444 (patch) | |
tree | e8d8c6451f48fe403cdbcb79a91294ec64ea832e | |
parent | f9d7e5cd9ecc1a22a4765dee9dbdd695b42c9c3a (diff) | |
download | gcc-d119f84ce709de6c2027065de97d2dd13ca57444.zip gcc-d119f84ce709de6c2027065de97d2dd13ca57444.tar.gz gcc-d119f84ce709de6c2027065de97d2dd13ca57444.tar.bz2 |
Donn Terry <donn@interix.com>
Donn Terry <donn@interix.com>
* i386.h (PRINT_OPERAND_PUNCT_VALID_P): Allow _.
* i386.c (print_operand): New %_ operator.
(load_pic_register): Proper number of leading _ in GOT literal.
* i386.md (prologue_get_pc_and_set_got): Likewise.
* i386/unix.h (ASM_OUTPUT_MI_THUNK): Likewise.
From-SVN: r26525
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 22 | ||||
-rw-r--r-- | gcc/config/i386/i386.h | 2 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 2 | ||||
-rw-r--r-- | gcc/config/i386/unix.h | 2 |
5 files changed, 29 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5d81e68..84223a7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,12 @@ -Mon Apr 19 08:12:30 1999 Richard Henderson <rth@cygnus.com> +Sat Apr 17 19:13:22 1999 Donn Terry <donn@interix.com> + + * i386.h (PRINT_OPERAND_PUNCT_VALID_P): Allow _. + * i386.c (print_operand): New %_ operator. + (load_pic_register): Proper number of leading _ in GOT literal. + * i386.md (prologue_get_pc_and_set_got): Likewise. + * i386/unix.h (ASM_OUTPUT_MI_THUNK): Likewise. + +Sat Apr 17 19:13:07 1999 Richard Henderson <rth@cygnus.com> * alpha.c (alpha_expand_prologue): Use gen_adddi3 instead of emit_move_insn+plus_constant. For NT, don't use the stack probe diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 843c84c..2ac0767 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -1879,14 +1879,19 @@ load_pic_register (do_rtl) { emit_insn (gen_prologue_get_pc (xops[0], xops[1])); emit_insn (gen_prologue_set_got (xops[0], - gen_rtx (SYMBOL_REF, Pmode, - "$_GLOBAL_OFFSET_TABLE_"), +#ifdef YES_UNDERSCORES + gen_rtx_SYMBOL_REF (Pmode, + "$__GLOBAL_OFFSET_TABLE_"), +#else + gen_rtx_SYMBOL_REF (Pmode, + "$_GLOBAL_OFFSET_TABLE_"), +#endif xops[1])); } else { output_asm_insn (AS1 (call,%X1), xops); - output_asm_insn ("addl $_GLOBAL_OFFSET_TABLE_,%0", xops); + output_asm_insn ("addl $%__GLOBAL_OFFSET_TABLE_,%0", xops); pic_label_rtx = 0; } } @@ -1909,7 +1914,7 @@ load_pic_register (do_rtl) ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L", CODE_LABEL_NUMBER (xops[1])); output_asm_insn (AS1 (pop%L0,%0), xops); - output_asm_insn ("addl $_GLOBAL_OFFSET_TABLE_+[.-%P1],%0", xops); + output_asm_insn ("addl $%__GLOBAL_OFFSET_TABLE_+[.-%P1],%0", xops); } } @@ -3372,7 +3377,8 @@ put_condition_code (code, reverse_cc, mode, file) k -- likewise, print the SImode name of the register. h -- print the QImode name for a "high" register, either ah, bh, ch or dh. y -- print "st(0)" instead of "st" as a register. - P -- print as a PIC constant */ + P -- print as a PIC constant + _ -- output "_" if YES_UNDERSCORES */ void print_operand (file, x, code) @@ -3389,6 +3395,12 @@ print_operand (file, x, code) putc ('*', file); return; + case '_': +#ifdef YES_UNDERSCORES + putc ('_', file); +#endif + return; + case 'L': PUT_OP_SIZE (code, 'l', file); return; diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index a455d2d..b485471 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -2578,7 +2578,7 @@ do { long l; \ F,f -- likewise, but for floating-point. */ #define PRINT_OPERAND_PUNCT_VALID_P(CODE) \ - ((CODE) == '*') + ((CODE) == '*' || (CODE) == '_') /* Print the name of a register based on its machine mode and number. If CODE is 'w', pretend the mode is HImode. diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 28e35e4..e18c592 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -6894,7 +6894,7 @@ byte_xor_operation: ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", CODE_LABEL_NUMBER (operands[1])); output_asm_insn (AS1 (pop%L0,%0), operands); - output_asm_insn (\"addl $_GLOBAL_OFFSET_TABLE_+[.-%X1],%0\", operands); + output_asm_insn (\"addl $%__GLOBAL_OFFSET_TABLE_+[.-%X1],%0\", operands); RET; }" [(set_attr "memory" "none")]) diff --git a/gcc/config/i386/unix.h b/gcc/config/i386/unix.h index 3ff2075..771d802 100644 --- a/gcc/config/i386/unix.h +++ b/gcc/config/i386/unix.h @@ -176,7 +176,7 @@ do { \ output_asm_insn (AS1 (call,%P1), xops); \ ASM_OUTPUT_INTERNAL_LABEL (FILE, "L", CODE_LABEL_NUMBER (xops[1])); \ output_asm_insn (AS1 (pop%L0,%0), xops); \ - output_asm_insn ("addl $_GLOBAL_OFFSET_TABLE_+[.-%P1],%0", xops); \ + output_asm_insn ("addl $%__GLOBAL_OFFSET_TABLE_+[.-%P1],%0", xops); \ fprintf (FILE, "\tmovl "); \ assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \ fprintf (FILE, "@GOT(%%ebx),%%ecx\n\tpopl %%ebx\n\tjmp *%%ecx\n"); \ |