// input args need no code
case ssa.OpPhi:
ssagen.CheckLoweredPhi(v)
- case ssa.OpCopy, ssa.OpRISCV64MOVconvert, ssa.OpRISCV64MOVDreg:
+ case ssa.OpCopy, ssa.OpRISCV64MOVDreg:
if v.Type.IsMemory() {
return
}
(ADD <ptr.Type> ptr (MOVDconst [s-moveSize(t.Alignment(), config)]))
mem)
-(Convert ...) => (MOVconvert ...)
-
// Checks
(IsNonNil ...) => (SNEZ ...)
(IsInBounds ...) => (Less64U ...)
{name: "SLTU", argLength: 2, reg: gp21, asm: "SLTU"}, // arg0 < arg1, unsigned, result is 0 or 1
{name: "SLTIU", argLength: 1, reg: gp11, asm: "SLTIU", aux: "Int64"}, // arg0 < auxint, unsigned, result is 0 or 1
- // MOVconvert converts between pointers and integers.
- // We have a special op for this so as to not confuse GC
- // (particularly stack maps). It takes a memory arg so it
- // gets correctly ordered with respect to GC safepoints.
- {name: "MOVconvert", argLength: 2, reg: gp11, asm: "MOV"}, // arg0, but converted to int/ptr as appropriate; arg1=mem
-
// Round ops to block fused-multiply-add extraction.
{name: "LoweredRound32F", argLength: 1, reg: fp11, resultInArg0: true},
{name: "LoweredRound64F", argLength: 1, reg: fp11, resultInArg0: true},
OpRISCV64SLTI
OpRISCV64SLTU
OpRISCV64SLTIU
- OpRISCV64MOVconvert
OpRISCV64LoweredRound32F
OpRISCV64LoweredRound64F
OpRISCV64CALLstatic
},
},
},
- {
- name: "MOVconvert",
- argLen: 2,
- asm: riscv.AMOV,
- reg: regInfo{
- inputs: []inputInfo{
- {0, 1006632944}, // X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X28 X29 X30
- },
- outputs: []outputInfo{
- {0, 1006632944}, // X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X28 X29 X30
- },
- },
- },
{
name: "LoweredRound32F",
argLen: 1,