Skip to content

Commit cc673d2

Browse files
committed
all: convert PPC64 CMPx ...,R0,... to CMPx Rx,$0
Cleanup all remaining trivial compares against $0 in ppc64x assembly. In math, SRD ...,Rx; CMP Rx, $0 is further simplified to SRDCC. Change-Id: Ia2bc204953e32f08ee142bfd06a91965f30f99b6 Reviewed-on: https://go-review.googlesource.com/c/go/+/587016 Reviewed-by: Dmitri Shuralyov <[email protected]> Reviewed-by: Lynn Boger <[email protected]> Run-TryBot: Paul Murphy <[email protected]> Reviewed-by: Cherry Mui <[email protected]> TryBot-Result: Gopher Robot <[email protected]> LUCI-TryBot-Result: Go LUCI <[email protected]>
1 parent 41884dc commit cc673d2

File tree

7 files changed

+62
-65
lines changed

7 files changed

+62
-65
lines changed

src/cmd/compile/internal/ppc64/ssa.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1916,17 +1916,17 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) {
19161916

19171917
case ssa.OpPPC64LoweredNilCheck:
19181918
if buildcfg.GOOS == "aix" {
1919-
// CMP Rarg0, R0
1919+
// CMP Rarg0, $0
19201920
// BNE 2(PC)
19211921
// STW R0, 0(R0)
19221922
// NOP (so the BNE has somewhere to land)
19231923

1924-
// CMP Rarg0, R0
1924+
// CMP Rarg0, $0
19251925
p := s.Prog(ppc64.ACMP)
19261926
p.From.Type = obj.TYPE_REG
19271927
p.From.Reg = v.Args[0].Reg()
1928-
p.To.Type = obj.TYPE_REG
1929-
p.To.Reg = ppc64.REG_R0
1928+
p.To.Type = obj.TYPE_CONST
1929+
p.To.Offset = 0
19301930

19311931
// BNE 2(PC)
19321932
p2 := s.Prog(ppc64.ABNE)

src/cmd/internal/obj/ppc64/obj9.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -969,15 +969,15 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) {
969969
if c.cursym.Func().Text.From.Sym.Wrapper() {
970970
// if(g->panic != nil && g->panic->argp == FP) g->panic->argp = bottom-of-frame
971971
//
972-
// MOVD g_panic(g), R3
973-
// CMP R0, R3
972+
// MOVD g_panic(g), R22
973+
// CMP R22, $0
974974
// BEQ end
975-
// MOVD panic_argp(R3), R4
976-
// ADD $(autosize+8), R1, R5
977-
// CMP R4, R5
975+
// MOVD panic_argp(R22), R23
976+
// ADD $(autosize+8), R1, R24
977+
// CMP R23, R24
978978
// BNE end
979-
// ADD $8, R1, R6
980-
// MOVD R6, panic_argp(R3)
979+
// ADD $8, R1, R25
980+
// MOVD R25, panic_argp(R22)
981981
// end:
982982
// NOP
983983
//
@@ -996,9 +996,9 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) {
996996
q = obj.Appendp(q, c.newprog)
997997
q.As = ACMP
998998
q.From.Type = obj.TYPE_REG
999-
q.From.Reg = REG_R0
1000-
q.To.Type = obj.TYPE_REG
1001-
q.To.Reg = REG_R22
999+
q.From.Reg = REG_R22
1000+
q.To.Type = obj.TYPE_CONST
1001+
q.To.Offset = 0
10021002

10031003
q = obj.Appendp(q, c.newprog)
10041004
q.As = ABEQ

src/crypto/subtle/xor_ppc64x.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ xor16:
8989
ADD $16, R8
9090
ADD $-16, R6
9191
small:
92-
CMP R6, R0
92+
CMP R6, $0
9393
BC 12,2,LR // BEQLR
9494
xor8:
9595
#ifdef GOPPC64_power10
@@ -131,7 +131,7 @@ xor2:
131131
ADD $2,R8
132132
ADD $-2,R6
133133
xor1:
134-
CMP R6, R0
134+
CMP R6, $0
135135
BC 12,2,LR // BEQLR
136136
MOVBZ (R4)(R8), R14 // R14 = a[i]
137137
MOVBZ (R5)(R8), R15 // R15 = b[i]

src/math/big/arith_ppc64x.s

Lines changed: 38 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ TEXT ·addVV(SB), NOSPLIT, $0
1818
MOVD z+0(FP), R10 // R10 = z[]
1919

2020
// If z_len = 0, we are done
21-
CMP R0, R7
21+
CMP R7, $0
2222
MOVD R0, R4
2323
BEQ done
2424

@@ -28,12 +28,12 @@ TEXT ·addVV(SB), NOSPLIT, $0
2828
MOVD 0(R9), R12 // R12 = y[i]
2929
ADD $-1, R7 // R7 = z_len - 1
3030
ADDC R12, R11, R15 // R15 = x[i] + y[i], set CA
31-
CMP R0, R7
31+
CMP R7, $0
3232
MOVD R15, 0(R10) // z[i]
3333
BEQ final // If z_len was 1, we are done
3434

3535
SRD $2, R7, R5 // R5 = z_len/4
36-
CMP R0, R5
36+
CMP R5, $0
3737
MOVD R5, CTR // Set up loop counter
3838
BEQ tail // If R5 = 0, we can't use the loop
3939

@@ -65,7 +65,7 @@ loop:
6565
BDNZ loop
6666

6767
// We may have more elements to read
68-
CMP R0, R7
68+
CMP R7, $0
6969
BEQ final
7070

7171
// Process the remaining elements, one at a time
@@ -74,15 +74,15 @@ tail:
7474
MOVDU 8(R9), R16 // R16 = y[i]
7575
ADD $-1, R7 // R7 = z_len - 1
7676
ADDE R11, R16, R20 // R20 = x[i] + y[i] + CA
77-
CMP R0, R7
77+
CMP R7, $0
7878
MOVDU R20, 8(R10) // z[i]
7979
BEQ final // If R7 = 0, we are done
8080

8181
MOVDU 8(R8), R11
8282
MOVDU 8(R9), R16
8383
ADD $-1, R7
8484
ADDE R11, R16, R20
85-
CMP R0, R7
85+
CMP R7, $0
8686
MOVDU R20, 8(R10)
8787
BEQ final
8888

@@ -107,7 +107,7 @@ TEXT ·subVV(SB), NOSPLIT, $0
107107
MOVD z+0(FP), R10 // R10 = z[]
108108

109109
// If z_len = 0, we are done
110-
CMP R0, R7
110+
CMP R7, $0
111111
MOVD R0, R4
112112
BEQ done
113113

@@ -117,12 +117,12 @@ TEXT ·subVV(SB), NOSPLIT, $0
117117
MOVD 0(R9), R12 // R12 = y[i]
118118
ADD $-1, R7 // R7 = z_len - 1
119119
SUBC R12, R11, R15 // R15 = x[i] - y[i], set CA
120-
CMP R0, R7
120+
CMP R7, $0
121121
MOVD R15, 0(R10) // z[i]
122122
BEQ final // If z_len was 1, we are done
123123

124124
SRD $2, R7, R5 // R5 = z_len/4
125-
CMP R0, R5
125+
CMP R5, $0
126126
MOVD R5, CTR // Set up loop counter
127127
BEQ tail // If R5 = 0, we can't use the loop
128128

@@ -154,7 +154,7 @@ loop:
154154
BDNZ loop
155155

156156
// We may have more elements to read
157-
CMP R0, R7
157+
CMP R7, $0
158158
BEQ final
159159

160160
// Process the remaining elements, one at a time
@@ -163,15 +163,15 @@ tail:
163163
MOVDU 8(R9), R16 // R16 = y[i]
164164
ADD $-1, R7 // R7 = z_len - 1
165165
SUBE R16, R11, R20 // R20 = x[i] - y[i] + CA
166-
CMP R0, R7
166+
CMP R7, $0
167167
MOVDU R20, 8(R10) // z[i]
168168
BEQ final // If R7 = 0, we are done
169169

170170
MOVDU 8(R8), R11
171171
MOVDU 8(R9), R16
172172
ADD $-1, R7
173173
SUBE R16, R11, R20
174-
CMP R0, R7
174+
CMP R7, $0
175175
MOVDU R20, 8(R10)
176176
BEQ final
177177

@@ -195,7 +195,7 @@ TEXT ·addVW(SB), NOSPLIT, $0
195195
MOVD y+48(FP), R4 // R4 = y = c
196196
MOVD z_len+8(FP), R11 // R11 = z_len
197197

198-
CMP R0, R11 // If z_len is zero, return
198+
CMP R11, $0 // If z_len is zero, return
199199
BEQ done
200200

201201
// We will process the first iteration out of the loop so we capture
@@ -204,14 +204,13 @@ TEXT ·addVW(SB), NOSPLIT, $0
204204
MOVD 0(R8), R20 // R20 = x[i]
205205
ADD $-1, R11 // R11 = z_len - 1
206206
ADDC R20, R4, R6 // R6 = x[i] + c
207-
CMP R0, R11 // If z_len was 1, we are done
207+
CMP R11, $0 // If z_len was 1, we are done
208208
MOVD R6, 0(R10) // z[i]
209209
BEQ final
210210

211211
// We will read 4 elements per iteration
212-
SRD $2, R11, R9 // R9 = z_len/4
212+
SRDCC $2, R11, R9 // R9 = z_len/4
213213
DCBT (R8)
214-
CMP R0, R9
215214
MOVD R9, CTR // Set up the loop counter
216215
BEQ tail // If R9 = 0, we can't use the loop
217216
PCALIGN $16
@@ -233,22 +232,22 @@ loop:
233232
BDNZ loop
234233

235234
// We may have some elements to read
236-
CMP R0, R11
235+
CMP R11, $0
237236
BEQ final
238237

239238
tail:
240239
MOVDU 8(R8), R20
241240
ADDZE R20, R24
242241
ADD $-1, R11
243242
MOVDU R24, 8(R10)
244-
CMP R0, R11
243+
CMP R11, $0
245244
BEQ final
246245

247246
MOVDU 8(R8), R20
248247
ADDZE R20, R24
249248
ADD $-1, R11
250249
MOVDU R24, 8(R10)
251-
CMP R0, R11
250+
CMP R11, $0
252251
BEQ final
253252

254253
MOVD 8(R8), R20
@@ -268,7 +267,7 @@ TEXT ·subVW(SB), NOSPLIT, $0
268267
MOVD y+48(FP), R4 // R4 = y = c
269268
MOVD z_len+8(FP), R11 // R11 = z_len
270269

271-
CMP R0, R11 // If z_len is zero, return
270+
CMP R11, $0 // If z_len is zero, return
272271
BEQ done
273272

274273
// We will process the first iteration out of the loop so we capture
@@ -277,14 +276,13 @@ TEXT ·subVW(SB), NOSPLIT, $0
277276
MOVD 0(R8), R20 // R20 = x[i]
278277
ADD $-1, R11 // R11 = z_len - 1
279278
SUBC R4, R20, R6 // R6 = x[i] - c
280-
CMP R0, R11 // If z_len was 1, we are done
279+
CMP R11, $0 // If z_len was 1, we are done
281280
MOVD R6, 0(R10) // z[i]
282281
BEQ final
283282

284283
// We will read 4 elements per iteration
285-
SRD $2, R11, R9 // R9 = z_len/4
284+
SRDCC $2, R11, R9 // R9 = z_len/4
286285
DCBT (R8)
287-
CMP R0, R9
288286
MOVD R9, CTR // Set up the loop counter
289287
BEQ tail // If R9 = 0, we can't use the loop
290288

@@ -310,22 +308,22 @@ loop:
310308
BDNZ loop
311309

312310
// We may have some elements to read
313-
CMP R0, R11
311+
CMP R11, $0
314312
BEQ final
315313

316314
tail:
317315
MOVDU 8(R8), R20
318316
SUBE R0, R20
319317
ADD $-1, R11
320318
MOVDU R20, 8(R10)
321-
CMP R0, R11
319+
CMP R11, $0
322320
BEQ final
323321

324322
MOVDU 8(R8), R20
325323
SUBE R0, R20
326324
ADD $-1, R11
327325
MOVDU R20, 8(R10)
328-
CMP R0, R11
326+
CMP R11, $0
329327
BEQ final
330328

331329
MOVD 8(R8), R20
@@ -348,9 +346,9 @@ TEXT ·shlVU(SB), NOSPLIT, $0
348346
MOVD s+48(FP), R9
349347
MOVD z_len+8(FP), R4
350348
MOVD x_len+32(FP), R7
351-
CMP R9, R0 // s==0 copy(z,x)
349+
CMP R9, $0 // s==0 copy(z,x)
352350
BEQ zeroshift
353-
CMP R4, R0 // len(z)==0 return
351+
CMP R4, $0 // len(z)==0 return
354352
BEQ done
355353

356354
ADD $-1, R4, R5 // len(z)-1
@@ -360,7 +358,7 @@ TEXT ·shlVU(SB), NOSPLIT, $0
360358
ADD R3, R7, R16 // save starting address &z[len(z)-1]
361359
MOVD (R6)(R7), R14
362360
SRD R4, R14, R7 // compute x[len(z)-1]>>ŝ into R7
363-
CMP R5, R0 // iterate from i=len(z)-1 to 0
361+
CMP R5, $0 // iterate from i=len(z)-1 to 0
364362
BEQ loopexit // Already at end?
365363
MOVD 0(R15),R10 // x[i]
366364
PCALIGN $16
@@ -382,7 +380,7 @@ loopexit:
382380
RET
383381

384382
zeroshift:
385-
CMP R6, R0 // x is null, nothing to copy
383+
CMP R6, $0 // x is null, nothing to copy
386384
BEQ done
387385
CMP R6, R3 // if x is same as z, nothing to copy
388386
BEQ done
@@ -423,9 +421,9 @@ TEXT ·shrVU(SB), NOSPLIT, $0
423421
MOVD z_len+8(FP), R4
424422
MOVD x_len+32(FP), R7
425423

426-
CMP R9, R0 // s==0, copy(z,x)
424+
CMP R9, $0 // s==0, copy(z,x)
427425
BEQ zeroshift
428-
CMP R4, R0 // len(z)==0 return
426+
CMP R4, $0 // len(z)==0 return
429427
BEQ done
430428
SUBC R9, $64, R5 // ŝ=_W-s, we skip & by _W-1 as the caller ensures s < _W(64)
431429

@@ -480,7 +478,7 @@ loopexit:
480478
RET
481479

482480
zeroshift:
483-
CMP R6, R0 // x is null, nothing to copy
481+
CMP R6, $0 // x is null, nothing to copy
484482
BEQ done
485483
CMP R6, R3 // if x is same as z, nothing to copy
486484
BEQ done
@@ -506,7 +504,7 @@ TEXT ·mulAddVWW(SB), NOSPLIT, $0
506504
MOVD r+56(FP), R4 // R4 = r = c
507505
MOVD z_len+8(FP), R11 // R11 = z_len
508506

509-
CMP R0, R11
507+
CMP R11, $0
510508
BEQ done
511509

512510
MOVD 0(R8), R20
@@ -515,14 +513,13 @@ TEXT ·mulAddVWW(SB), NOSPLIT, $0
515513
MULHDU R9, R20, R7 // R7 = z1 = High-order(x[i]*y)
516514
ADDC R4, R6 // R6 = z0 + r
517515
ADDZE R7, R4 // R4 = z1 + CA
518-
CMP R0, R11
516+
CMP R11, $0
519517
MOVD R6, 0(R10) // z[i]
520518
BEQ done
521519

522520
// We will read 4 elements per iteration
523-
SRD $2, R11, R14 // R14 = z_len/4
521+
SRDCC $2, R11, R14 // R14 = z_len/4
524522
DCBT (R8)
525-
CMP R0, R14
526523
MOVD R14, CTR // Set up the loop counter
527524
BEQ tail // If R9 = 0, we can't use the loop
528525
PCALIGN $16
@@ -553,7 +550,7 @@ loop:
553550
BDNZ loop
554551

555552
// We may have some elements to read
556-
CMP R0, R11
553+
CMP R11, $0
557554
BEQ done
558555

559556
// Process the remaining elements, one at a time
@@ -565,7 +562,7 @@ tail:
565562
ADDC R4, R24
566563
ADDZE R25, R4
567564
MOVDU R24, 8(R10) // z[i]
568-
CMP R0, R11
565+
CMP R11, $0
569566
BEQ done // If R11 = 0, we are done
570567

571568
MOVDU 8(R8), R20
@@ -575,7 +572,7 @@ tail:
575572
ADDC R4, R24
576573
ADDZE R25, R4
577574
MOVDU R24, 8(R10)
578-
CMP R0, R11
575+
CMP R11, $0
579576
BEQ done
580577

581578
MOVD 8(R8), R20
@@ -647,7 +644,7 @@ loop:
647644

648645
ANDCC $3, R6
649646
tail:
650-
CMP R0, R6
647+
CMP R6, $0
651648
BEQ done
652649
MOVD R6, CTR
653650
PCALIGN $16

0 commit comments

Comments
 (0)