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] |
Dear GCC maintainers: Here is a bug report and bug fix / improvement: The small data optimization allowed in the PowerPC SystemV ABI specification (or its embedded refinement, eabi), as implemented in the GCC file gcc/config/rs6000/rs6000.c is creating conflicts and inefficiencies (missed optimization opportunities) when the __attribute__ ((section...)) is used for object declarations. This issue applies when -msdata=eabi or -msdata=sysv. (The conflicts can be avoided by setting the GCC driver option - G 0 which is analogue to -msdata=none.) I enclose a fix to rs6000.c (from GCC-3.2.2 distribution, but should be applicable to other versions as well). I also enclose a sample program and the generated assembler code for various values of the -G option. The current documentation was unclear as to when the r2 or r13 addressing was used. With the proposed fix, the documentation should read: -msdata=eabi On System V.4 and embedded PowerPC systems, put small initialized const global and static data in the .sdata2 section, which is pointed to by register r2. Put small initialized non-const global and static data in the .sdata section, which is pointed to by register r13. Put small uninitialized global and static data in the .sbss section, which is adjacent to the .sdata section. Use register r2 or r13 to address variables allocated to these sections, either implicitly or explicitly with __attribute__ ((section)). The -msdata=eabi option is incompatible with the -mrelocatable option. The -msdata=eabi option also sets the -memb option. -msdata=sysv On System V.4 and embedded PowerPC systems, put small global and static data in the .sdata section, which is pointed to by register r13. Put small uninitialized global and static data in the .sbss section, which is adjacent to the .sdata section. Use register r13 to address variables allocated to these sections, either implicitly or explicitly with __attribute__ ((section)). The -msdata=sysv option is incompatible with the -mrelocatable option. This bug fix or enhancement should be beneficial to the embedded software developers. ChangeLog entry: 2003-02-14 Thierry Moreau <thierry.moreau@connotech.com> * config/rs6000/rs6000.c functions rs6000_encode_section_info and small_data_operand: PowerPC- sysV/eabi, harmonization of section attribute and small data optimization Many thanks for the GCC compiler technology. -- - Thierry Moreau CONNOTECH Experts-conseils inc. 9130 Place de Montgolfier Montreal, Qc H2M 2A1 Tel.: (514)385-5691 Fax: (514)385-5900 e-mail: thierry.moreau@connotech.com
*** rs6000.c Fri Feb 14 14:15:58 2003 --- rs6000.bak Thu Feb 13 10:57:14 2003 *************** small_data_operand (op, mode) *** 1679,1686 **** rtx sum = XEXP (op, 0); HOST_WIDE_INT summand; summand = INTVAL (XEXP (sum, 1)); ! if (summand < 0) return 0; sym_ref = XEXP (sum, 0); --- 1679,1688 ---- rtx sum = XEXP (op, 0); HOST_WIDE_INT summand; + /* We have to be careful here, because it is the referenced address + that must be 32k from _SDA_BASE_, not just the symbol. */ summand = INTVAL (XEXP (sum, 1)); ! if (summand < 0 || summand > g_switch_value) return 0; sym_ref = XEXP (sum, 0); *************** rs6000_encode_section_info (decl) *** 11031,11038 **** abort (); } ! if (name? ! ((len == sizeof (".sdata") && strcmp (name, ".sdata") == 0) || (len == sizeof (".sdata2") && strcmp (name, ".sdata2") == 0) --- 11033,11041 ---- abort (); } ! if ((size > 0 && size <= g_switch_value) ! || (name ! && ((len == sizeof (".sdata") && strcmp (name, ".sdata") == 0) || (len == sizeof (".sdata2") && strcmp (name, ".sdata2") == 0) *************** rs6000_encode_section_info (decl) *** 11043,11050 **** || (len == sizeof (".PPC.EMB.sdata0") && strcmp (name, ".PPC.EMB.sdata0") == 0) || (len == sizeof (".PPC.EMB.sbss0") ! && strcmp (name, ".PPC.EMB.sbss0") == 0)) ! :(size > 0 && size <= g_switch_value)) { rtx sym_ref = XEXP (DECL_RTL (decl), 0); size_t len = strlen (XSTR (sym_ref, 0)); --- 11046,11052 ---- || (len == sizeof (".PPC.EMB.sdata0") && strcmp (name, ".PPC.EMB.sdata0") == 0) || (len == sizeof (".PPC.EMB.sbss0") ! && strcmp (name, ".PPC.EMB.sbss0") == 0)))) { rtx sym_ref = XEXP (DECL_RTL (decl), 0); size_t len = strlen (XSTR (sym_ref, 0));
.file "test_rs6000_sda.cpp" # rs6000/powerpc options: -mcpu=860 -msdata=eabi -G 4 # GNU C++ version 3.2.2 (powerpc-eabi) # compiled by GNU C version 2.96 20000731 (Red Hat Linux 7.3 2.96-110). # options passed: -v -D__GNUC__=3 -D__GNUC_MINOR__=2 # -D__GNUC_PATCHLEVEL__=2 -D__GXX_ABI_VERSION=102 -DPPC -D__embedded__ # -D__PPC__ -D__embedded__ -D__PPC -Asystem=embedded -Acpu=powerpc # -Amachine=powerpc -D__OPTIMIZE__ -D__STDC_HOSTED__=1 -D_CALL_SYSV # -D_SOFT_FLOAT -D_BIG_ENDIAN -D__BIG_ENDIAN__ -Amachine=bigendian # -D_ARCH_PPC -D__GNUG__=3 -D__DEPRECATED -G -mcpu=860 -mno-altivec # -mbig-endian -mmultiple -mstring -mupdate -mcall-sysv -meabi # -msvr4-struct-return -mprototype -mno-relocatable -mno-relocatable-lib # -msdata=eabi -memb -mregnames -O2 -fno-exceptions -fverbose-asm # options enabled: -fdefer-pop -fomit-frame-pointer # -foptimize-sibling-calls -fcse-follow-jumps -fcse-skip-blocks # -fexpensive-optimizations -fthread-jumps -fstrength-reduce -fpeephole # -fforce-mem -ffunction-cse -fkeep-static-consts -fcaller-saves # -freg-struct-return -fgcse -fgcse-lm -fgcse-sm -frerun-cse-after-loop # -frerun-loop-opt -fdelete-null-pointer-checks -fschedule-insns # -fschedule-insns2 -fsched-interblock -fsched-spec -fbranch-count-reg # -freorder-blocks -fcprop-registers -fcommon -fverbose-asm -fgnu-linker # -fregmove -foptimize-register-move -fargument-alias -fstrict-aliasing # -fmerge-constants -fident -fpeephole2 -fguess-branch-probability # -fmath-errno -ftrapping-math -mpowerpc -mnew-mnemonics -msoft-float # -mmultiple -mno-multiple -mstring -mno-string -msched-prolog # -msched-epilog -msvr4-struct-return -mno-aix-struct-return -mprototype # -meabi -mregnames -mcpu=860 -mcall-sysv -msdata=eabi .globl sda_array .section .sbss,"aw",@nobits .align 2 .type sda_array,@object .size sda_array,8000 sda_array: .zero 8000 .globl byte_v .globl byte_v .section ".sbss","aw",@nobits byte_v: .zero 1 .size byte_v,1 .globl short_v .globl short_v .align 1 short_v: .zero 2 .size short_v,2 .globl long_v .globl long_v .align 2 long_v: .zero 4 .size long_v,4 .globl peripheral_register .section .periph_reg_sect,"aw",@progbits .type peripheral_register,@object .size peripheral_register,1 peripheral_register: .zero 1 .section ".text" .align 2 .globl _Z8functionv .type _Z8functionv,@function _Z8functionv: lha %r0,short_v@sda21(%r0) # short_v lbz %r3,byte_v@sda21(%r0) # byte_v lwz %r9,long_v@sda21(%r0) # long_v add %r3,%r3,%r0 lis %r10,sda_array@ha add %r3,%r3,%r9 la %r11,sda_array@l(%r10) li %r0,1 li %r9,0 slwi %r3,%r3,2 add %r3,%r3,%r11 stw %r0,sda_array@l(%r10) # sda_array stb %r9,peripheral_register@sda21(%r0) # peripheral_register li %r0,2 li %r9,3 stw %r0,400(%r11) # sda_array stw %r9,4000(%r11) # sda_array blr .Lfe1: .size _Z8functionv,.Lfe1-_Z8functionv .ident "GCC: (GNU) 3.2.2"
Attachment:
test_rs6000_sda.cpp
Description: application/unknown-content-type-cppfile
.file "test_rs6000_sda.cpp" # rs6000/powerpc options: -mcpu=860 -msdata=eabi -G 2 # GNU C++ version 3.2.2 (powerpc-eabi) # compiled by GNU C version 2.96 20000731 (Red Hat Linux 7.3 2.96-110). # options passed: -v -D__GNUC__=3 -D__GNUC_MINOR__=2 # -D__GNUC_PATCHLEVEL__=2 -D__GXX_ABI_VERSION=102 -DPPC -D__embedded__ # -D__PPC__ -D__embedded__ -D__PPC -Asystem=embedded -Acpu=powerpc # -Amachine=powerpc -D__OPTIMIZE__ -D__STDC_HOSTED__=1 -D_CALL_SYSV # -D_SOFT_FLOAT -D_BIG_ENDIAN -D__BIG_ENDIAN__ -Amachine=bigendian # -D_ARCH_PPC -D__GNUG__=3 -D__DEPRECATED -G -mcpu=860 -mno-altivec # -mbig-endian -mmultiple -mstring -mupdate -mcall-sysv -meabi # -msvr4-struct-return -mprototype -mno-relocatable -mno-relocatable-lib # -msdata=eabi -memb -mregnames -O2 -fno-exceptions -fverbose-asm # options enabled: -fdefer-pop -fomit-frame-pointer # -foptimize-sibling-calls -fcse-follow-jumps -fcse-skip-blocks # -fexpensive-optimizations -fthread-jumps -fstrength-reduce -fpeephole # -fforce-mem -ffunction-cse -fkeep-static-consts -fcaller-saves # -freg-struct-return -fgcse -fgcse-lm -fgcse-sm -frerun-cse-after-loop # -frerun-loop-opt -fdelete-null-pointer-checks -fschedule-insns # -fschedule-insns2 -fsched-interblock -fsched-spec -fbranch-count-reg # -freorder-blocks -fcprop-registers -fcommon -fverbose-asm -fgnu-linker # -fregmove -foptimize-register-move -fargument-alias -fstrict-aliasing # -fmerge-constants -fident -fpeephole2 -fguess-branch-probability # -fmath-errno -ftrapping-math -mpowerpc -mnew-mnemonics -msoft-float # -mmultiple -mno-multiple -mstring -mno-string -msched-prolog # -msched-epilog -msvr4-struct-return -mno-aix-struct-return -mprototype # -meabi -mregnames -mcpu=860 -mcall-sysv -msdata=eabi .globl sda_array .section .sbss,"aw",@nobits .align 2 .type sda_array,@object .size sda_array,8000 sda_array: .zero 8000 .globl byte_v .globl byte_v .section ".sbss","aw",@nobits byte_v: .zero 1 .size byte_v,1 .globl short_v .globl short_v .align 1 short_v: .zero 2 .size short_v,2 .globl long_v .globl long_v .lcomm long_v,4,4 .globl peripheral_register .section .periph_reg_sect,"aw",@progbits .type peripheral_register,@object .size peripheral_register,1 peripheral_register: .zero 1 .section ".text" .align 2 .globl _Z8functionv .type _Z8functionv,@function _Z8functionv: lha %r11,short_v@sda21(%r0) # short_v lbz %r3,byte_v@sda21(%r0) # byte_v lis %r9,long_v@ha lwz %r0,long_v@l(%r9) # long_v add %r3,%r3,%r11 lis %r10,sda_array@ha add %r3,%r3,%r0 la %r11,sda_array@l(%r10) li %r0,1 li %r9,0 slwi %r3,%r3,2 add %r3,%r3,%r11 stw %r0,sda_array@l(%r10) # sda_array stb %r9,peripheral_register@sda21(%r0) # peripheral_register li %r0,2 li %r9,3 stw %r0,400(%r11) # sda_array stw %r9,4000(%r11) # sda_array blr .Lfe1: .size _Z8functionv,.Lfe1-_Z8functionv .ident "GCC: (GNU) 3.2.2"
.file "test_rs6000_sda.cpp" # rs6000/powerpc options: -mcpu=860 -msdata=eabi -G 10000 # GNU C++ version 3.2.2 (powerpc-eabi) # compiled by GNU C version 2.96 20000731 (Red Hat Linux 7.3 2.96-110). # options passed: -v -D__GNUC__=3 -D__GNUC_MINOR__=2 # -D__GNUC_PATCHLEVEL__=2 -D__GXX_ABI_VERSION=102 -DPPC -D__embedded__ # -D__PPC__ -D__embedded__ -D__PPC -Asystem=embedded -Acpu=powerpc # -Amachine=powerpc -D__OPTIMIZE__ -D__STDC_HOSTED__=1 -D_CALL_SYSV # -D_SOFT_FLOAT -D_BIG_ENDIAN -D__BIG_ENDIAN__ -Amachine=bigendian # -D_ARCH_PPC -D__GNUG__=3 -D__DEPRECATED -G -mcpu=860 -mno-altivec # -mbig-endian -mmultiple -mstring -mupdate -mcall-sysv -meabi # -msvr4-struct-return -mprototype -mno-relocatable -mno-relocatable-lib # -msdata=eabi -memb -mregnames -O2 -fno-exceptions -fverbose-asm # options enabled: -fdefer-pop -fomit-frame-pointer # -foptimize-sibling-calls -fcse-follow-jumps -fcse-skip-blocks # -fexpensive-optimizations -fthread-jumps -fstrength-reduce -fpeephole # -fforce-mem -ffunction-cse -fkeep-static-consts -fcaller-saves # -freg-struct-return -fgcse -fgcse-lm -fgcse-sm -frerun-cse-after-loop # -frerun-loop-opt -fdelete-null-pointer-checks -fschedule-insns # -fschedule-insns2 -fsched-interblock -fsched-spec -fbranch-count-reg # -freorder-blocks -fcprop-registers -fcommon -fverbose-asm -fgnu-linker # -fregmove -foptimize-register-move -fargument-alias -fstrict-aliasing # -fmerge-constants -fident -fpeephole2 -fguess-branch-probability # -fmath-errno -ftrapping-math -mpowerpc -mnew-mnemonics -msoft-float # -mmultiple -mno-multiple -mstring -mno-string -msched-prolog # -msched-epilog -msvr4-struct-return -mno-aix-struct-return -mprototype # -meabi -mregnames -mcpu=860 -mcall-sysv -msdata=eabi .globl sda_array .section .sbss,"aw",@nobits .align 2 .type sda_array,@object .size sda_array,8000 sda_array: .zero 8000 .globl byte_v .globl byte_v .section ".sbss","aw",@nobits byte_v: .zero 1 .size byte_v,1 .globl short_v .globl short_v .align 1 short_v: .zero 2 .size short_v,2 .globl long_v .globl long_v .align 2 long_v: .zero 4 .size long_v,4 .globl peripheral_register .section .periph_reg_sect,"aw",@progbits .type peripheral_register,@object .size peripheral_register,1 peripheral_register: .zero 1 .section ".text" .align 2 .globl _Z8functionv .type _Z8functionv,@function _Z8functionv: lha %r0,short_v@sda21(%r0) # short_v lbz %r3,byte_v@sda21(%r0) # byte_v lwz %r9,long_v@sda21(%r0) # long_v add %r3,%r3,%r0 add %r3,%r3,%r9 la %r11,sda_array@sda21(%r0) li %r0,0 li %r9,1 slwi %r3,%r3,2 add %r3,%r3,%r11 stb %r0,peripheral_register@sda21(%r0) # peripheral_register stw %r9,0(%r11) # sda_array li %r0,2 li %r9,3 stw %r0,sda_array+400@sda21(%r0) # sda_array stw %r9,sda_array+4000@sda21(%r0) # sda_array blr .Lfe1: .size _Z8functionv,.Lfe1-_Z8functionv .ident "GCC: (GNU) 3.2.2"
.file "test_rs6000_sda.cpp" # rs6000/powerpc options: -mcpu=860 -msdata=eabi # GNU C++ version 3.2.2 (powerpc-eabi) # compiled by GNU C version 2.96 20000731 (Red Hat Linux 7.3 2.96-110). # options passed: -v -D__GNUC__=3 -D__GNUC_MINOR__=2 # -D__GNUC_PATCHLEVEL__=2 -D__GXX_ABI_VERSION=102 -DPPC -D__embedded__ # -D__PPC__ -D__embedded__ -D__PPC -Asystem=embedded -Acpu=powerpc # -Amachine=powerpc -D__OPTIMIZE__ -D__STDC_HOSTED__=1 -D_CALL_SYSV # -D_SOFT_FLOAT -D_BIG_ENDIAN -D__BIG_ENDIAN__ -Amachine=bigendian # -D_ARCH_PPC -D__GNUG__=3 -D__DEPRECATED -G -mcpu=860 -mno-altivec # -mbig-endian -mmultiple -mstring -mupdate -mcall-sysv -meabi # -msvr4-struct-return -mprototype -mno-relocatable -mno-relocatable-lib # -msdata=eabi -memb -mregnames -O2 -fno-exceptions -fverbose-asm # options enabled: -fdefer-pop -fomit-frame-pointer # -foptimize-sibling-calls -fcse-follow-jumps -fcse-skip-blocks # -fexpensive-optimizations -fthread-jumps -fstrength-reduce -fpeephole # -fforce-mem -ffunction-cse -fkeep-static-consts -fcaller-saves # -freg-struct-return -fgcse -fgcse-lm -fgcse-sm -frerun-cse-after-loop # -frerun-loop-opt -fdelete-null-pointer-checks -fschedule-insns # -fschedule-insns2 -fsched-interblock -fsched-spec -fbranch-count-reg # -freorder-blocks -fcprop-registers -fcommon -fverbose-asm -fgnu-linker # -fregmove -foptimize-register-move -fargument-alias -fstrict-aliasing # -fmerge-constants -fident -fpeephole2 -fguess-branch-probability # -fmath-errno -ftrapping-math -mpowerpc -mnew-mnemonics -msoft-float # -mmultiple -mno-multiple -mstring -mno-string -msched-prolog # -msched-epilog -msvr4-struct-return -mno-aix-struct-return -mprototype # -meabi -mregnames -mcpu=860 -mcall-sysv -msdata=eabi .globl sda_array .section .sbss,"aw",@nobits .align 2 .type sda_array,@object .size sda_array,8000 sda_array: .zero 8000 .globl byte_v .globl byte_v .lcomm byte_v,1,1 .globl short_v .globl short_v .lcomm short_v,2,2 .globl long_v .globl long_v .lcomm long_v,4,4 .globl peripheral_register .section .periph_reg_sect,"aw",@progbits .type peripheral_register,@object .size peripheral_register,1 peripheral_register: .zero 1 .section ".text" .align 2 .globl _Z8functionv .type _Z8functionv,@function _Z8functionv: lis %r9,byte_v@ha lis %r11,short_v@ha lha %r10,short_v@l(%r11) # short_v lbz %r3,byte_v@l(%r9) # byte_v lis %r9,long_v@ha lwz %r0,long_v@l(%r9) # long_v add %r3,%r3,%r10 lis %r8,sda_array@ha add %r3,%r3,%r0 la %r10,sda_array@l(%r8) li %r11,0 lis %r9,peripheral_register@ha li %r0,1 slwi %r3,%r3,2 add %r3,%r3,%r10 stb %r11,peripheral_register@l(%r9) # peripheral_register stw %r0,sda_array@l(%r8) # sda_array li %r9,2 li %r0,3 stw %r9,400(%r10) # sda_array stw %r0,4000(%r10) # sda_array blr .Lfe1: .size _Z8functionv,.Lfe1-_Z8functionv .ident "GCC: (GNU) 3.2.2"
.file "test_rs6000_sda.cpp" # rs6000/powerpc options: -mcpu=860 -msdata=eabi -G 4 # GNU C++ version 3.2.2 (powerpc-eabi) # compiled by GNU C version 2.96 20000731 (Red Hat Linux 7.3 2.96-110). # options passed: -v -D__GNUC__=3 -D__GNUC_MINOR__=2 # -D__GNUC_PATCHLEVEL__=2 -D__GXX_ABI_VERSION=102 -DPPC -D__embedded__ # -D__PPC__ -D__embedded__ -D__PPC -Asystem=embedded -Acpu=powerpc # -Amachine=powerpc -D__OPTIMIZE__ -D__STDC_HOSTED__=1 -D_CALL_SYSV # -D_SOFT_FLOAT -D_BIG_ENDIAN -D__BIG_ENDIAN__ -Amachine=bigendian # -D_ARCH_PPC -D__GNUG__=3 -D__DEPRECATED -G -mcpu=860 -mno-altivec # -mbig-endian -mmultiple -mstring -mupdate -mcall-sysv -meabi # -msvr4-struct-return -mprototype -mno-relocatable -mno-relocatable-lib # -msdata=eabi -memb -mregnames -O2 -fno-exceptions -fverbose-asm # options enabled: -fdefer-pop -fomit-frame-pointer # -foptimize-sibling-calls -fcse-follow-jumps -fcse-skip-blocks # -fexpensive-optimizations -fthread-jumps -fstrength-reduce -fpeephole # -fforce-mem -ffunction-cse -fkeep-static-consts -fcaller-saves # -freg-struct-return -fgcse -fgcse-lm -fgcse-sm -frerun-cse-after-loop # -frerun-loop-opt -fdelete-null-pointer-checks -fschedule-insns # -fschedule-insns2 -fsched-interblock -fsched-spec -fbranch-count-reg # -freorder-blocks -fcprop-registers -fcommon -fverbose-asm -fgnu-linker # -fregmove -foptimize-register-move -fargument-alias -fstrict-aliasing # -fmerge-constants -fident -fpeephole2 -fguess-branch-probability # -fmath-errno -ftrapping-math -mpowerpc -mnew-mnemonics -msoft-float # -mmultiple -mno-multiple -mstring -mno-string -msched-prolog # -msched-epilog -msvr4-struct-return -mno-aix-struct-return -mprototype # -meabi -mregnames -mcpu=860 -mcall-sysv -msdata=eabi .globl sda_array .section .sbss,"aw",@nobits .align 2 .type sda_array,@object .size sda_array,8000 sda_array: .zero 8000 .globl byte_v .globl byte_v .section ".sbss","aw",@nobits byte_v: .zero 1 .size byte_v,1 .globl short_v .globl short_v .align 1 short_v: .zero 2 .size short_v,2 .globl long_v .globl long_v .align 2 long_v: .zero 4 .size long_v,4 .globl peripheral_register .section .periph_reg_sect,"aw",@progbits .type peripheral_register,@object .size peripheral_register,1 peripheral_register: .zero 1 .section ".text" .align 2 .globl _Z8functionv .type _Z8functionv,@function _Z8functionv: lha %r0,short_v@sda21(%r0) # short_v lbz %r3,byte_v@sda21(%r0) # byte_v lwz %r9,long_v@sda21(%r0) # long_v add %r3,%r3,%r0 add %r3,%r3,%r9 la %r10,sda_array@sda21(%r0) li %r11,0 lis %r9,peripheral_register@ha li %r0,1 slwi %r3,%r3,2 add %r3,%r3,%r10 stb %r11,peripheral_register@l(%r9) # peripheral_register stw %r0,0(%r10) # sda_array li %r9,2 li %r0,3 stw %r9,sda_array+400@sda21(%r0) # sda_array stw %r0,sda_array+4000@sda21(%r0) # sda_array blr .Lfe1: .size _Z8functionv,.Lfe1-_Z8functionv .ident "GCC: (GNU) 3.2.2"
.file "test_rs6000_sda.cpp" # rs6000/powerpc options: -mcpu=860 -msdata=eabi -G 2 # GNU C++ version 3.2.2 (powerpc-eabi) # compiled by GNU C version 2.96 20000731 (Red Hat Linux 7.3 2.96-110). # options passed: -v -D__GNUC__=3 -D__GNUC_MINOR__=2 # -D__GNUC_PATCHLEVEL__=2 -D__GXX_ABI_VERSION=102 -DPPC -D__embedded__ # -D__PPC__ -D__embedded__ -D__PPC -Asystem=embedded -Acpu=powerpc # -Amachine=powerpc -D__OPTIMIZE__ -D__STDC_HOSTED__=1 -D_CALL_SYSV # -D_SOFT_FLOAT -D_BIG_ENDIAN -D__BIG_ENDIAN__ -Amachine=bigendian # -D_ARCH_PPC -D__GNUG__=3 -D__DEPRECATED -G -mcpu=860 -mno-altivec # -mbig-endian -mmultiple -mstring -mupdate -mcall-sysv -meabi # -msvr4-struct-return -mprototype -mno-relocatable -mno-relocatable-lib # -msdata=eabi -memb -mregnames -O2 -fno-exceptions -fverbose-asm # options enabled: -fdefer-pop -fomit-frame-pointer # -foptimize-sibling-calls -fcse-follow-jumps -fcse-skip-blocks # -fexpensive-optimizations -fthread-jumps -fstrength-reduce -fpeephole # -fforce-mem -ffunction-cse -fkeep-static-consts -fcaller-saves # -freg-struct-return -fgcse -fgcse-lm -fgcse-sm -frerun-cse-after-loop # -frerun-loop-opt -fdelete-null-pointer-checks -fschedule-insns # -fschedule-insns2 -fsched-interblock -fsched-spec -fbranch-count-reg # -freorder-blocks -fcprop-registers -fcommon -fverbose-asm -fgnu-linker # -fregmove -foptimize-register-move -fargument-alias -fstrict-aliasing # -fmerge-constants -fident -fpeephole2 -fguess-branch-probability # -fmath-errno -ftrapping-math -mpowerpc -mnew-mnemonics -msoft-float # -mmultiple -mno-multiple -mstring -mno-string -msched-prolog # -msched-epilog -msvr4-struct-return -mno-aix-struct-return -mprototype # -meabi -mregnames -mcpu=860 -mcall-sysv -msdata=eabi .globl sda_array .section .sbss,"aw",@nobits .align 2 .type sda_array,@object .size sda_array,8000 sda_array: .zero 8000 .globl byte_v .globl byte_v .section ".sbss","aw",@nobits byte_v: .zero 1 .size byte_v,1 .globl short_v .globl short_v .align 1 short_v: .zero 2 .size short_v,2 .globl long_v .globl long_v .lcomm long_v,4,4 .globl peripheral_register .section .periph_reg_sect,"aw",@progbits .type peripheral_register,@object .size peripheral_register,1 peripheral_register: .zero 1 .section ".text" .align 2 .globl _Z8functionv .type _Z8functionv,@function _Z8functionv: lha %r11,short_v@sda21(%r0) # short_v lbz %r3,byte_v@sda21(%r0) # byte_v lis %r9,long_v@ha lwz %r0,long_v@l(%r9) # long_v add %r3,%r3,%r11 add %r3,%r3,%r0 la %r10,sda_array@sda21(%r0) li %r11,0 lis %r9,peripheral_register@ha li %r0,1 slwi %r3,%r3,2 add %r3,%r3,%r10 stb %r11,peripheral_register@l(%r9) # peripheral_register stw %r0,0(%r10) # sda_array li %r9,2 li %r0,3 stw %r9,sda_array+400@sda21(%r0) # sda_array stw %r0,sda_array+4000@sda21(%r0) # sda_array blr .Lfe1: .size _Z8functionv,.Lfe1-_Z8functionv .ident "GCC: (GNU) 3.2.2"
.file "test_rs6000_sda.cpp" # rs6000/powerpc options: -mcpu=860 -msdata=eabi # GNU C++ version 3.2.2 (powerpc-eabi) # compiled by GNU C version 2.96 20000731 (Red Hat Linux 7.3 2.96-110). # options passed: -v -D__GNUC__=3 -D__GNUC_MINOR__=2 # -D__GNUC_PATCHLEVEL__=2 -D__GXX_ABI_VERSION=102 -DPPC -D__embedded__ # -D__PPC__ -D__embedded__ -D__PPC -Asystem=embedded -Acpu=powerpc # -Amachine=powerpc -D__OPTIMIZE__ -D__STDC_HOSTED__=1 -D_CALL_SYSV # -D_SOFT_FLOAT -D_BIG_ENDIAN -D__BIG_ENDIAN__ -Amachine=bigendian # -D_ARCH_PPC -D__GNUG__=3 -D__DEPRECATED -G -mcpu=860 -mno-altivec # -mbig-endian -mmultiple -mstring -mupdate -mcall-sysv -meabi # -msvr4-struct-return -mprototype -mno-relocatable -mno-relocatable-lib # -msdata=eabi -memb -mregnames -O2 -fno-exceptions -fverbose-asm # options enabled: -fdefer-pop -fomit-frame-pointer # -foptimize-sibling-calls -fcse-follow-jumps -fcse-skip-blocks # -fexpensive-optimizations -fthread-jumps -fstrength-reduce -fpeephole # -fforce-mem -ffunction-cse -fkeep-static-consts -fcaller-saves # -freg-struct-return -fgcse -fgcse-lm -fgcse-sm -frerun-cse-after-loop # -frerun-loop-opt -fdelete-null-pointer-checks -fschedule-insns # -fschedule-insns2 -fsched-interblock -fsched-spec -fbranch-count-reg # -freorder-blocks -fcprop-registers -fcommon -fverbose-asm -fgnu-linker # -fregmove -foptimize-register-move -fargument-alias -fstrict-aliasing # -fmerge-constants -fident -fpeephole2 -fguess-branch-probability # -fmath-errno -ftrapping-math -mpowerpc -mnew-mnemonics -msoft-float # -mmultiple -mno-multiple -mstring -mno-string -msched-prolog # -msched-epilog -msvr4-struct-return -mno-aix-struct-return -mprototype # -meabi -mregnames -mcpu=860 -mcall-sysv -msdata=eabi .globl sda_array .section .sbss,"aw",@nobits .align 2 .type sda_array,@object .size sda_array,8000 sda_array: .zero 8000 .globl byte_v .globl byte_v .lcomm byte_v,1,1 .globl short_v .globl short_v .lcomm short_v,2,2 .globl long_v .globl long_v .lcomm long_v,4,4 .globl peripheral_register .section .periph_reg_sect,"aw",@progbits .type peripheral_register,@object .size peripheral_register,1 peripheral_register: .zero 1 .section ".text" .align 2 .globl _Z8functionv .type _Z8functionv,@function _Z8functionv: lis %r9,byte_v@ha lis %r11,short_v@ha lha %r10,short_v@l(%r11) # short_v lbz %r3,byte_v@l(%r9) # byte_v lis %r9,long_v@ha lwz %r0,long_v@l(%r9) # long_v add %r3,%r3,%r10 add %r3,%r3,%r0 la %r10,sda_array@sda21(%r0) li %r11,0 lis %r9,peripheral_register@ha li %r0,1 slwi %r3,%r3,2 add %r3,%r3,%r10 stb %r11,peripheral_register@l(%r9) # peripheral_register stw %r0,0(%r10) # sda_array li %r9,2 li %r0,3 stw %r9,sda_array+400@sda21(%r0) # sda_array stw %r0,sda_array+4000@sda21(%r0) # sda_array blr .Lfe1: .size _Z8functionv,.Lfe1-_Z8functionv .ident "GCC: (GNU) 3.2.2"
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |