@@ -120,8 +120,6 @@ var optabBase = []Optab{
120
120
{as : AADD , a1 : C_SCON , a6 : C_REG , type_ : 4 , size : 4 },
121
121
{as : AADD , a1 : C_ADDCON , a2 : C_REG , a6 : C_REG , type_ : 4 , size : 4 },
122
122
{as : AADD , a1 : C_ADDCON , a6 : C_REG , type_ : 4 , size : 4 },
123
- {as : AADD , a1 : C_UCON , a2 : C_REG , a6 : C_REG , type_ : 20 , size : 4 },
124
- {as : AADD , a1 : C_UCON , a6 : C_REG , type_ : 20 , size : 4 },
125
123
{as : AADD , a1 : C_ANDCON , a2 : C_REG , a6 : C_REG , type_ : 22 , size : 8 },
126
124
{as : AADD , a1 : C_ANDCON , a6 : C_REG , type_ : 22 , size : 8 },
127
125
{as : AADDIS , a1 : C_ADDCON , a2 : C_REG , a6 : C_REG , type_ : 20 , size : 4 },
@@ -138,14 +136,12 @@ var optabBase = []Optab{
138
136
{as : AANDCC , a1 : C_REG , a6 : C_REG , type_ : 6 , size : 4 },
139
137
{as : AANDCC , a1 : C_ANDCON , a6 : C_REG , type_ : 58 , size : 4 },
140
138
{as : AANDCC , a1 : C_ANDCON , a2 : C_REG , a6 : C_REG , type_ : 58 , size : 4 },
141
- {as : AANDCC , a1 : C_UCON , a6 : C_REG , type_ : 59 , size : 4 },
142
- {as : AANDCC , a1 : C_UCON , a2 : C_REG , a6 : C_REG , type_ : 59 , size : 4 },
143
139
{as : AANDCC , a1 : C_ADDCON , a6 : C_REG , type_ : 23 , size : 8 },
144
140
{as : AANDCC , a1 : C_ADDCON , a2 : C_REG , a6 : C_REG , type_ : 23 , size : 8 },
145
141
{as : AANDCC , a1 : C_LCON , a6 : C_REG , type_ : 23 , size : 12 },
146
142
{as : AANDCC , a1 : C_LCON , a2 : C_REG , a6 : C_REG , type_ : 23 , size : 12 },
147
- {as : AANDISCC , a1 : C_ANDCON , a6 : C_REG , type_ : 59 , size : 4 },
148
- {as : AANDISCC , a1 : C_ANDCON , a2 : C_REG , a6 : C_REG , type_ : 59 , size : 4 },
143
+ {as : AANDISCC , a1 : C_ANDCON , a6 : C_REG , type_ : 58 , size : 4 },
144
+ {as : AANDISCC , a1 : C_ANDCON , a2 : C_REG , a6 : C_REG , type_ : 58 , size : 4 },
149
145
{as : AMULLW , a1 : C_REG , a2 : C_REG , a6 : C_REG , type_ : 2 , size : 4 },
150
146
{as : AMULLW , a1 : C_REG , a6 : C_REG , type_ : 2 , size : 4 },
151
147
{as : AMULLW , a1 : C_ADDCON , a2 : C_REG , a6 : C_REG , type_ : 4 , size : 4 },
@@ -162,14 +158,12 @@ var optabBase = []Optab{
162
158
{as : AOR , a1 : C_REG , a6 : C_REG , type_ : 6 , size : 4 },
163
159
{as : AOR , a1 : C_ANDCON , a6 : C_REG , type_ : 58 , size : 4 },
164
160
{as : AOR , a1 : C_ANDCON , a2 : C_REG , a6 : C_REG , type_ : 58 , size : 4 },
165
- {as : AOR , a1 : C_UCON , a6 : C_REG , type_ : 59 , size : 4 },
166
- {as : AOR , a1 : C_UCON , a2 : C_REG , a6 : C_REG , type_ : 59 , size : 4 },
167
161
{as : AOR , a1 : C_ADDCON , a6 : C_REG , type_ : 23 , size : 8 },
168
162
{as : AOR , a1 : C_ADDCON , a2 : C_REG , a6 : C_REG , type_ : 23 , size : 8 },
169
163
{as : AOR , a1 : C_LCON , a6 : C_REG , type_ : 23 , size : 12 },
170
164
{as : AOR , a1 : C_LCON , a2 : C_REG , a6 : C_REG , type_ : 23 , size : 12 },
171
- {as : AORIS , a1 : C_ANDCON , a6 : C_REG , type_ : 59 , size : 4 },
172
- {as : AORIS , a1 : C_ANDCON , a2 : C_REG , a6 : C_REG , type_ : 59 , size : 4 },
165
+ {as : AORIS , a1 : C_ANDCON , a6 : C_REG , type_ : 58 , size : 4 },
166
+ {as : AORIS , a1 : C_ANDCON , a2 : C_REG , a6 : C_REG , type_ : 58 , size : 4 },
173
167
{as : ADIVW , a1 : C_REG , a2 : C_REG , a6 : C_REG , type_ : 2 , size : 4 }, /* op r1[,r2],r3 */
174
168
{as : ADIVW , a1 : C_REG , a6 : C_REG , type_ : 2 , size : 4 },
175
169
{as : ASUB , a1 : C_REG , a2 : C_REG , a6 : C_REG , type_ : 10 , size : 4 }, /* op r2[,r1],r3 */
@@ -240,7 +234,6 @@ var optabBase = []Optab{
240
234
241
235
{as : AMOVD , a1 : C_ADDCON , a6 : C_REG , type_ : 3 , size : 4 },
242
236
{as : AMOVD , a1 : C_ANDCON , a6 : C_REG , type_ : 3 , size : 4 },
243
- {as : AMOVD , a1 : C_UCON , a6 : C_REG , type_ : 3 , size : 4 },
244
237
{as : AMOVD , a1 : C_SACON , a6 : C_REG , type_ : 3 , size : 4 },
245
238
{as : AMOVD , a1 : C_SOREG , a6 : C_REG , type_ : 8 , size : 4 },
246
239
{as : AMOVD , a1 : C_XOREG , a6 : C_REG , type_ : 109 , size : 4 },
@@ -254,7 +247,6 @@ var optabBase = []Optab{
254
247
255
248
{as : AMOVW , a1 : C_ADDCON , a6 : C_REG , type_ : 3 , size : 4 },
256
249
{as : AMOVW , a1 : C_ANDCON , a6 : C_REG , type_ : 3 , size : 4 },
257
- {as : AMOVW , a1 : C_UCON , a6 : C_REG , type_ : 3 , size : 4 },
258
250
{as : AMOVW , a1 : C_SACON , a6 : C_REG , type_ : 3 , size : 4 },
259
251
{as : AMOVW , a1 : C_CREG , a6 : C_REG , type_ : 68 , size : 4 },
260
252
{as : AMOVW , a1 : C_SOREG , a6 : C_REG , type_ : 8 , size : 4 },
@@ -1051,10 +1043,6 @@ func (c *ctxt9) aclass(a *obj.Addr) int {
1051
1043
case sbits <= 16 :
1052
1044
return C_U16CON
1053
1045
case sbits <= 31 :
1054
- // Special case, a positive int32 value which is a multiple of 2^16
1055
- if c .instoffset & 0xFFFF == 0 {
1056
- return C_U3216CON
1057
- }
1058
1046
return C_U32CON
1059
1047
case sbits <= 32 :
1060
1048
return C_U32CON
@@ -1069,10 +1057,6 @@ func (c *ctxt9) aclass(a *obj.Addr) int {
1069
1057
case sbits <= 15 :
1070
1058
return C_S16CON
1071
1059
case sbits <= 31 :
1072
- // Special case, a negative int32 value which is a multiple of 2^16
1073
- if c .instoffset & 0xFFFF == 0 {
1074
- return C_S3216CON
1075
- }
1076
1060
return C_S32CON
1077
1061
case sbits <= 33 :
1078
1062
return C_S34CON
@@ -1193,15 +1177,12 @@ func cmp(a int, b int) bool {
1193
1177
case C_S16CON :
1194
1178
return cmp (C_U15CON , b )
1195
1179
case C_32CON :
1196
- return cmp (C_S16CON , b ) || cmp (C_U16CON , b ) || cmp ( C_32S16CON , b )
1180
+ return cmp (C_S16CON , b ) || cmp (C_U16CON , b )
1197
1181
case C_S34CON :
1198
1182
return cmp (C_32CON , b )
1199
1183
case C_64CON :
1200
1184
return cmp (C_S34CON , b )
1201
1185
1202
- case C_32S16CON :
1203
- return cmp (C_ZCON , b )
1204
-
1205
1186
case C_LACON :
1206
1187
return cmp (C_SACON , b )
1207
1188
@@ -2598,20 +2579,7 @@ func asmout(c *ctxt9, p *obj.Prog, o *Optab, out *[5]uint32) {
2598
2579
c .ctxt .Diag ("literal operation on R0\n %v" , p )
2599
2580
}
2600
2581
a := OP_ADDI
2601
- if o .a1 == C_UCON {
2602
- if d & 0xffff != 0 {
2603
- log .Fatalf ("invalid handling of %v" , p )
2604
- }
2605
- // For UCON operands the value is right shifted 16, using ADDIS if the
2606
- // value should be signed, ORIS if unsigned.
2607
- v >>= 16
2608
- if r == REGZERO && isuint32 (uint64 (d )) {
2609
- o1 = LOP_IRR (OP_ORIS , uint32 (p .To .Reg ), REGZERO , uint32 (v ))
2610
- break
2611
- }
2612
-
2613
- a = OP_ADDIS
2614
- } else if int64 (int16 (d )) != d {
2582
+ if int64 (int16 (d )) != d {
2615
2583
// Operand is 16 bit value with sign bit set
2616
2584
if o .a1 == C_ANDCON {
2617
2585
// Needs unsigned 16 bit so use ORI
@@ -2944,14 +2912,7 @@ func asmout(c *ctxt9, p *obj.Prog, o *Optab, out *[5]uint32) {
2944
2912
if r == 0 {
2945
2913
r = int (p .To .Reg )
2946
2914
}
2947
- if p .As == AADD && (r0iszero == 0 /*TypeKind(100016)*/ && p .Reg == 0 || r0iszero != 0 /*TypeKind(100016)*/ && p .To .Reg == 0 ) {
2948
- c .ctxt .Diag ("literal operation on R0\n %v" , p )
2949
- }
2950
- if p .As == AADDIS {
2951
- o1 = AOP_IRR (c .opirr (p .As ), uint32 (p .To .Reg ), uint32 (r ), uint32 (v ))
2952
- } else {
2953
- o1 = AOP_IRR (c .opirr (AADDIS ), uint32 (p .To .Reg ), uint32 (r ), uint32 (v )>> 16 )
2954
- }
2915
+ o1 = AOP_IRR (c .opirr (p .As ), uint32 (p .To .Reg ), uint32 (r ), uint32 (v ))
2955
2916
2956
2917
case 22 : /* add $lcon/$andcon,r1,r2 ==> oris+ori+add/ori+add, add $s34con,r1 ==> addis+ori+slw+ori+add */
2957
2918
if p .To .Reg == REGTMP || p .Reg == REGTMP {
@@ -3425,24 +3386,6 @@ func asmout(c *ctxt9, p *obj.Prog, o *Optab, out *[5]uint32) {
3425
3386
}
3426
3387
o1 = LOP_IRR (c .opirr (p .As ), uint32 (p .To .Reg ), uint32 (r ), uint32 (v ))
3427
3388
3428
- case 59 : /* or/xor/and $ucon,,r | oris/xoris/andis $addcon,r,r */
3429
- v := c .regoff (& p .From )
3430
-
3431
- r := int (p .Reg )
3432
- if r == 0 {
3433
- r = int (p .To .Reg )
3434
- }
3435
- switch p .As {
3436
- case AOR :
3437
- o1 = LOP_IRR (c .opirr (AORIS ), uint32 (p .To .Reg ), uint32 (r ), uint32 (v )>> 16 ) /* oris, xoris, andis. */
3438
- case AXOR :
3439
- o1 = LOP_IRR (c .opirr (AXORIS ), uint32 (p .To .Reg ), uint32 (r ), uint32 (v )>> 16 )
3440
- case AANDCC :
3441
- o1 = LOP_IRR (c .opirr (AANDISCC ), uint32 (p .To .Reg ), uint32 (r ), uint32 (v )>> 16 )
3442
- default :
3443
- o1 = LOP_IRR (c .opirr (p .As ), uint32 (p .To .Reg ), uint32 (r ), uint32 (v ))
3444
- }
3445
-
3446
3389
case 60 : /* tw to,a,b */
3447
3390
r := int (c .regoff (& p .From ) & 31 )
3448
3391
0 commit comments