1
2
3
4
5 package riscv
6
7 import (
8 "fmt"
9
10 "cmd/internal/obj"
11 )
12
13 func init() {
14 obj.RegisterRegister(obj.RBaseRISCV, REG_END, RegName)
15 obj.RegisterOpcode(obj.ABaseRISCV, Anames)
16 obj.RegisterOpSuffix("riscv64", opSuffixString)
17 obj.RegisterSpecialOperands(int64(SPOP_BEGIN), int64(SPOP_END), specialOperandConv)
18 }
19
20 func RegName(r int) string {
21 switch {
22 case r == 0:
23 return "NONE"
24 case r == REG_G:
25 return "g"
26 case r == REG_SP:
27 return "SP"
28 case REG_X0 <= r && r <= REG_X31:
29 return fmt.Sprintf("X%d", r-REG_X0)
30 case REG_F0 <= r && r <= REG_F31:
31 return fmt.Sprintf("F%d", r-REG_F0)
32 case REG_V0 <= r && r <= REG_V31:
33 return fmt.Sprintf("V%d", r-REG_V0)
34 default:
35 return fmt.Sprintf("Rgok(%d)", r-obj.RBaseRISCV)
36 }
37 }
38
39 func opSuffixString(s uint8) string {
40 if s&rmSuffixBit == 0 {
41 return ""
42 }
43
44 ss, err := rmSuffixString(s)
45 if err != nil {
46 ss = fmt.Sprintf("<invalid 0x%x>", s)
47 }
48 if ss == "" {
49 return ss
50 }
51 return fmt.Sprintf(".%s", ss)
52 }
53
54 func specialOperandConv(a int64) string {
55 spc := SpecialOperand(a)
56 if spc >= SPOP_BEGIN && spc < SPOP_END {
57 return spc.String()
58 }
59 return "SPC_??"
60 }
61
View as plain text