blob: 8995c4c1592ca708b10221dd3e6fcf1aa2168fbe [file] [log] [blame]
// Copyright 2025 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package asmgen
var ArchRISCV64 = &Arch{
Name: "riscv64",
WordBits: 64,
WordBytes: 8,
CarrySafeLoop: true,
regs: []string{
// X0 is zero.
// X1 is LR.
// X2 is SP.
// X3 is SB.
// X4 is TP.
// X27 is g.
// X28 and X29 are our virtual carry flags.
// X31 is the assembler/linker temporary (which we use too).
"X5", "X6", "X7", "X8", "X9",
"X10", "X11", "X12", "X13", "X14", "X15", "X16", "X17", "X18", "X19",
"X20", "X21", "X22", "X23", "X24", "X25", "X26",
"X30",
},
reg0: "X0",
regCarry: "X28",
regAltCarry: "X29",
regTmp: "X31",
mov: "MOV",
add: "ADD",
sub: "SUB",
mul: "MUL",
mulhi: "MULHU",
lsh: "SLL",
rsh: "SRL",
and: "AND",
or: "OR",
xor: "XOR",
sltu: "SLTU",
jmpZero: "BEQZ %s, %s",
jmpNonZero: "BNEZ %s, %s",
}