This is the mail archive of the crossgcc@cygnus.com mailing list for the crossgcc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

GCC 2.8.1/powerpc-eabi register allocation


Hello All,

I use the following tools for powerpc-eabi target: GCC 2.8.1, BUNUTILS
2.9.1. Due to performance reasons it is necessary to allocate some
global variables into PowerPC registers, but unfortunately it looks like
I can not manage it via "register <varType> <varName> asm("<regName>");"
statement as described in GCC documentation.

If I use such statement ("register int var1 asm("r14");" for example),
then generated code seems to be wrong (all PowerPC GPR registers r14-r31
are saved/restored during function prologue/epilogue), therefore global
variable "var1" becomes local one (if "var1" local variable, then
generated code is the same). Please find test code "main.c" as well as
corresponding listings attached.

The following command line was used (var1, var2, var3 are global
variables):
$ gcc -c -D GLOBAL -eabi -Wa,-alh,-L,>main_global.l main.c

The following command line was used (var1, var2, var3 are local
variables):
$ gcc -c -eabi -Wa,-alh,-L,>main_local.l main.c

"main_global.l" is the same as "main_local.l".

Is it necessary to use some additional compiler option? May you
recommend me the source of GCC/powerpc-eabi technical information or
contact person?

Any help will be greatly appreciated.

Best regards,
--
Yaroslav Domaratsky (RTE team)  mailto:R35383@email.mot.com
Motorola ZAO, SPSD              Phone: 7-812-329-1927
1 Artilleriyskaya Str.,         Fax:   7-812-329-1912
St. Petersburg, 191104, Russia  Maildrop: ZRU03

main.c

GAS LISTING C:/TEMP\cc001005.s 			page 1


   1              		.file	"main.c"
   2              	gcc2_compiled.:
   3              		.section ".text"
   4              		.align 2
   5              		.globl set
   6              		.type	 set,@function
   7              	set:
   8 0000 9421FFA8 		stwu 1,-88(1)
   9 0004 91C10010 		stw 14,16(1)
  10 0008 91E10014 		stw 15,20(1)
  11 000c 92010018 		stw 16,24(1)
  12 0010 9221001C 		stw 17,28(1)
  13 0014 92410020 		stw 18,32(1)
  14 0018 92610024 		stw 19,36(1)
  15 001c 92810028 		stw 20,40(1)
  16 0020 92A1002C 		stw 21,44(1)
  17 0024 92C10030 		stw 22,48(1)
  18 0028 92E10034 		stw 23,52(1)
  19 002c 93010038 		stw 24,56(1)
  20 0030 9321003C 		stw 25,60(1)
  21 0034 93410040 		stw 26,64(1)
  22 0038 93610044 		stw 27,68(1)
  23 003c 93810048 		stw 28,72(1)
  24 0040 93A1004C 		stw 29,76(1)
  25 0044 93C10050 		stw 30,80(1)
  26 0048 93E10054 		stw 31,84(1)
  27 004c 7C3F0B78 		mr 31,1
  28 0050 907F0008 		stw 3,8(31)
  29 0054 909F000C 		stw 4,12(31)
  30 0058 81DF0008 		lwz 14,8(31)
  31 005c 81FF000C 		lwz 15,12(31)
  32 0060 38600001 		li 3,1
  33 0064 48000004 		b .L1
  34              	.L1:
  35 0068 81610000 		lwz 11,0(1)
  36 006c 81CBFFB8 		lwz 14,-72(11)
  37 0070 81EBFFBC 		lwz 15,-68(11)
  38 0074 820BFFC0 		lwz 16,-64(11)
  39 0078 822BFFC4 		lwz 17,-60(11)
  40 007c 824BFFC8 		lwz 18,-56(11)
  41 0080 826BFFCC 		lwz 19,-52(11)
  42 0084 828BFFD0 		lwz 20,-48(11)
  43 0088 82ABFFD4 		lwz 21,-44(11)
  44 008c 82CBFFD8 		lwz 22,-40(11)
  45 0090 82EBFFDC 		lwz 23,-36(11)
  46 0094 830BFFE0 		lwz 24,-32(11)
  47 0098 832BFFE4 		lwz 25,-28(11)
  48 009c 834BFFE8 		lwz 26,-24(11)
  49 00a0 836BFFEC 		lwz 27,-20(11)
  50 00a4 838BFFF0 		lwz 28,-16(11)
  51 00a8 83ABFFF4 		lwz 29,-12(11)
  52 00ac 83CBFFF8 		lwz 30,-8(11)
  53 00b0 83EBFFFC 		lwz 31,-4(11)
  54 00b4 7D615B78 		mr 1,11
  55 00b8 4E800020 		blr
  56              	.Lfe1:
  57              		.size	 set,.Lfe1-set
GAS LISTING C:/TEMP\cc001005.s 			page 2


  58              		.align 2
  59              		.globl main
  60              		.type	 main,@function
  61              	main:
  62 00bc 9421FFB0 		stwu 1,-80(1)
  63 00c0 7C0802A6 		mflr 0
  64 00c4 91C10008 		stw 14,8(1)
  65 00c8 91E1000C 		stw 15,12(1)
  66 00cc 92010010 		stw 16,16(1)
  67 00d0 92210014 		stw 17,20(1)
  68 00d4 92410018 		stw 18,24(1)
  69 00d8 9261001C 		stw 19,28(1)
  70 00dc 92810020 		stw 20,32(1)
  71 00e0 92A10024 		stw 21,36(1)
  72 00e4 92C10028 		stw 22,40(1)
  73 00e8 92E1002C 		stw 23,44(1)
  74 00ec 93010030 		stw 24,48(1)
  75 00f0 93210034 		stw 25,52(1)
  76 00f4 93410038 		stw 26,56(1)
  77 00f8 9361003C 		stw 27,60(1)
  78 00fc 93810040 		stw 28,64(1)
  79 0100 93A10044 		stw 29,68(1)
  80 0104 93C10048 		stw 30,72(1)
  81 0108 93E1004C 		stw 31,76(1)
  82 010c 90010054 		stw 0,84(1)
  83 0110 7C3F0B78 		mr 31,1
  84 0114 48000001 		bl __eabi
  85 0118 39C00001 		li 14,1
  86 011c 39E00002 		li 15,2
  87 0120 38600003 		li 3,3
  88 0124 38800004 		li 4,4
  89 0128 48000001 		bl set
  90 012c 7C701B78 		mr 16,3
  91 0130 38600000 		li 3,0
  92 0134 48000004 		b .L2
  93              	.L2:
  94 0138 81610000 		lwz 11,0(1)
  95 013c 800B0004 		lwz 0,4(11)
  96 0140 7C0803A6 		mtlr 0
  97 0144 81CBFFB8 		lwz 14,-72(11)
  98 0148 81EBFFBC 		lwz 15,-68(11)
  99 014c 820BFFC0 		lwz 16,-64(11)
 100 0150 822BFFC4 		lwz 17,-60(11)
 101 0154 824BFFC8 		lwz 18,-56(11)
 102 0158 826BFFCC 		lwz 19,-52(11)
 103 015c 828BFFD0 		lwz 20,-48(11)
 104 0160 82ABFFD4 		lwz 21,-44(11)
 105 0164 82CBFFD8 		lwz 22,-40(11)
 106 0168 82EBFFDC 		lwz 23,-36(11)
 107 016c 830BFFE0 		lwz 24,-32(11)
 108 0170 832BFFE4 		lwz 25,-28(11)
 109 0174 834BFFE8 		lwz 26,-24(11)
 110 0178 836BFFEC 		lwz 27,-20(11)
 111 017c 838BFFF0 		lwz 28,-16(11)
 112 0180 83ABFFF4 		lwz 29,-12(11)
 113 0184 83CBFFF8 		lwz 30,-8(11)
 114 0188 83EBFFFC 		lwz 31,-4(11)
GAS LISTING C:/TEMP\cc001005.s 			page 3


 115 018c 7D615B78 		mr 1,11
 116 0190 4E800020 		blr
 117              	.Lfe2:
 118              		.size	 main,.Lfe2-main
 119              		.ident	"GCC: (GNU) 2.8.1"
GAS LISTING C:/TEMP\cc001014.s 			page 1


   1              		.file	"main.c"
   2              	gcc2_compiled.:
   3              		.section ".text"
   4              		.align 2
   5              		.globl set
   6              		.type	 set,@function
   7              	set:
   8 0000 9421FFA8 		stwu 1,-88(1)
   9 0004 91C10010 		stw 14,16(1)
  10 0008 91E10014 		stw 15,20(1)
  11 000c 92010018 		stw 16,24(1)
  12 0010 9221001C 		stw 17,28(1)
  13 0014 92410020 		stw 18,32(1)
  14 0018 92610024 		stw 19,36(1)
  15 001c 92810028 		stw 20,40(1)
  16 0020 92A1002C 		stw 21,44(1)
  17 0024 92C10030 		stw 22,48(1)
  18 0028 92E10034 		stw 23,52(1)
  19 002c 93010038 		stw 24,56(1)
  20 0030 9321003C 		stw 25,60(1)
  21 0034 93410040 		stw 26,64(1)
  22 0038 93610044 		stw 27,68(1)
  23 003c 93810048 		stw 28,72(1)
  24 0040 93A1004C 		stw 29,76(1)
  25 0044 93C10050 		stw 30,80(1)
  26 0048 93E10054 		stw 31,84(1)
  27 004c 7C3F0B78 		mr 31,1
  28 0050 907F0008 		stw 3,8(31)
  29 0054 909F000C 		stw 4,12(31)
  30 0058 81DF0008 		lwz 14,8(31)
  31 005c 81FF000C 		lwz 15,12(31)
  32 0060 38600001 		li 3,1
  33 0064 48000004 		b .L1
  34              	.L1:
  35 0068 81610000 		lwz 11,0(1)
  36 006c 81CBFFB8 		lwz 14,-72(11)
  37 0070 81EBFFBC 		lwz 15,-68(11)
  38 0074 820BFFC0 		lwz 16,-64(11)
  39 0078 822BFFC4 		lwz 17,-60(11)
  40 007c 824BFFC8 		lwz 18,-56(11)
  41 0080 826BFFCC 		lwz 19,-52(11)
  42 0084 828BFFD0 		lwz 20,-48(11)
  43 0088 82ABFFD4 		lwz 21,-44(11)
  44 008c 82CBFFD8 		lwz 22,-40(11)
  45 0090 82EBFFDC 		lwz 23,-36(11)
  46 0094 830BFFE0 		lwz 24,-32(11)
  47 0098 832BFFE4 		lwz 25,-28(11)
  48 009c 834BFFE8 		lwz 26,-24(11)
  49 00a0 836BFFEC 		lwz 27,-20(11)
  50 00a4 838BFFF0 		lwz 28,-16(11)
  51 00a8 83ABFFF4 		lwz 29,-12(11)
  52 00ac 83CBFFF8 		lwz 30,-8(11)
  53 00b0 83EBFFFC 		lwz 31,-4(11)
  54 00b4 7D615B78 		mr 1,11
  55 00b8 4E800020 		blr
  56              	.Lfe1:
  57              		.size	 set,.Lfe1-set
GAS LISTING C:/TEMP\cc001014.s 			page 2


  58              		.align 2
  59              		.globl main
  60              		.type	 main,@function
  61              	main:
  62 00bc 9421FFB0 		stwu 1,-80(1)
  63 00c0 7C0802A6 		mflr 0
  64 00c4 91C10008 		stw 14,8(1)
  65 00c8 91E1000C 		stw 15,12(1)
  66 00cc 92010010 		stw 16,16(1)
  67 00d0 92210014 		stw 17,20(1)
  68 00d4 92410018 		stw 18,24(1)
  69 00d8 9261001C 		stw 19,28(1)
  70 00dc 92810020 		stw 20,32(1)
  71 00e0 92A10024 		stw 21,36(1)
  72 00e4 92C10028 		stw 22,40(1)
  73 00e8 92E1002C 		stw 23,44(1)
  74 00ec 93010030 		stw 24,48(1)
  75 00f0 93210034 		stw 25,52(1)
  76 00f4 93410038 		stw 26,56(1)
  77 00f8 9361003C 		stw 27,60(1)
  78 00fc 93810040 		stw 28,64(1)
  79 0100 93A10044 		stw 29,68(1)
  80 0104 93C10048 		stw 30,72(1)
  81 0108 93E1004C 		stw 31,76(1)
  82 010c 90010054 		stw 0,84(1)
  83 0110 7C3F0B78 		mr 31,1
  84 0114 48000001 		bl __eabi
  85 0118 39C00001 		li 14,1
  86 011c 39E00002 		li 15,2
  87 0120 38600003 		li 3,3
  88 0124 38800004 		li 4,4
  89 0128 48000001 		bl set
  90 012c 7C701B78 		mr 16,3
  91 0130 38600000 		li 3,0
  92 0134 48000004 		b .L2
  93              	.L2:
  94 0138 81610000 		lwz 11,0(1)
  95 013c 800B0004 		lwz 0,4(11)
  96 0140 7C0803A6 		mtlr 0
  97 0144 81CBFFB8 		lwz 14,-72(11)
  98 0148 81EBFFBC 		lwz 15,-68(11)
  99 014c 820BFFC0 		lwz 16,-64(11)
 100 0150 822BFFC4 		lwz 17,-60(11)
 101 0154 824BFFC8 		lwz 18,-56(11)
 102 0158 826BFFCC 		lwz 19,-52(11)
 103 015c 828BFFD0 		lwz 20,-48(11)
 104 0160 82ABFFD4 		lwz 21,-44(11)
 105 0164 82CBFFD8 		lwz 22,-40(11)
 106 0168 82EBFFDC 		lwz 23,-36(11)
 107 016c 830BFFE0 		lwz 24,-32(11)
 108 0170 832BFFE4 		lwz 25,-28(11)
 109 0174 834BFFE8 		lwz 26,-24(11)
 110 0178 836BFFEC 		lwz 27,-20(11)
 111 017c 838BFFF0 		lwz 28,-16(11)
 112 0180 83ABFFF4 		lwz 29,-12(11)
 113 0184 83CBFFF8 		lwz 30,-8(11)
 114 0188 83EBFFFC 		lwz 31,-4(11)
GAS LISTING C:/TEMP\cc001014.s 			page 3


 115 018c 7D615B78 		mr 1,11
 116 0190 4E800020 		blr
 117              	.Lfe2:
 118              		.size	 main,.Lfe2-main
 119              		.ident	"GCC: (GNU) 2.8.1"