ckb-vm icon indicating copy to clipboard operation
ckb-vm copied to clipboard

feat: mop twins ld/sd

Open mohanson opened this issue 4 years ago • 0 comments
trafficstars

Twins LD/Twins SD

Since gcc often generates 4 or 8 consecutive ld/sd codes, doing mop on them can reduce the overhead of boundary check on AsmMachine.

some codes from secp256k1

10a1c:       00053803                ld      a6,0(a0)
10a20:       650c                    ld      a1,8(a0)
10a22:       6914                    ld      a3,16(a0)
10a24:       6d1c                    ld      a5,24(a0)

Pattern

Combine two consecutive ld/sd into one mop twins_ld/twins_sd.

Twins SD

sd a1, imm(a0)
sd a2, imm±8(a0)
  • -128 <= min(imm, imm±8) <= 127

Twins LD

ld a1, imm(a0)
ld a2, imm±8(a0)
  • -128 <= min(imm, imm±8) <= 127
  • when imm±8 > imm:
    • a0 != a1
  • when imm±8 < imm
    • a0 != a2
    • a1 != a2

mohanson avatar Jun 18 '21 03:06 mohanson