1
2
3
4
5
6
7
8
9 package arch
10
11 import (
12 "cmd/internal/obj"
13 "cmd/internal/obj/riscv"
14 )
15
16
17
18 func IsRISCV64AMO(op obj.As) bool {
19 switch op {
20 case riscv.ASCW, riscv.ASCD, riscv.AAMOSWAPW, riscv.AAMOSWAPD, riscv.AAMOADDW, riscv.AAMOADDD,
21 riscv.AAMOANDW, riscv.AAMOANDD, riscv.AAMOORW, riscv.AAMOORD, riscv.AAMOXORW, riscv.AAMOXORD,
22 riscv.AAMOMINW, riscv.AAMOMIND, riscv.AAMOMINUW, riscv.AAMOMINUD,
23 riscv.AAMOMAXW, riscv.AAMOMAXD, riscv.AAMOMAXUW, riscv.AAMOMAXUD:
24 return true
25 }
26 return false
27 }
28
29
30
31 func IsRISCV64VTypeI(op obj.As) bool {
32 return op == riscv.AVSETVLI || op == riscv.AVSETIVLI
33 }
34
35 var riscv64SpecialOperand map[string]riscv.SpecialOperand
36
37
38 func RISCV64SpecialOperand(name string) riscv.SpecialOperand {
39 if riscv64SpecialOperand == nil {
40
41 riscv64SpecialOperand = map[string]riscv.SpecialOperand{}
42 for opd := riscv.SPOP_BEGIN; opd < riscv.SPOP_END; opd++ {
43 riscv64SpecialOperand[opd.String()] = opd
44 }
45 }
46 if opd, ok := riscv64SpecialOperand[name]; ok {
47 return opd
48 }
49 return riscv.SPOP_END
50 }
51
52
53
54 func RISCV64ValidateVectorType(vsew, vlmul, vtail, vmask int64) error {
55 _, err := riscv.EncodeVectorType(vsew, vlmul, vtail, vmask)
56 return err
57 }
58
View as plain text