1
2
3
4
5
6
7
8
9 package arch
10
11 import (
12 "cmd/internal/obj"
13 "cmd/internal/obj/mips"
14 )
15
16 func jumpMIPS(word string) bool {
17 switch word {
18 case "BEQ", "BFPF", "BFPT", "BGEZ", "BGEZAL", "BGTZ", "BLEZ", "BLTZ", "BLTZAL", "BNE", "JMP", "JAL", "CALL":
19 return true
20 }
21 return false
22 }
23
24
25
26 func IsMIPSCMP(op obj.As) bool {
27 switch op {
28 case mips.ACMPEQF, mips.ACMPEQD, mips.ACMPGEF, mips.ACMPGED,
29 mips.ACMPGTF, mips.ACMPGTD:
30 return true
31 }
32 return false
33 }
34
35
36
37 func IsMIPSMUL(op obj.As) bool {
38 switch op {
39 case mips.AMUL, mips.AMULU, mips.AMULV, mips.AMULVU,
40 mips.ADIV, mips.ADIVU, mips.ADIVV, mips.ADIVVU,
41 mips.AREM, mips.AREMU, mips.AREMV, mips.AREMVU,
42 mips.AMADD, mips.AMSUB:
43 return true
44 }
45 return false
46 }
47
48 func mipsRegisterNumber(name string, n int16) (int16, bool) {
49 switch name {
50 case "F":
51 if 0 <= n && n <= 31 {
52 return mips.REG_F0 + n, true
53 }
54 case "FCR":
55 if 0 <= n && n <= 31 {
56 return mips.REG_FCR0 + n, true
57 }
58 case "M":
59 if 0 <= n && n <= 31 {
60 return mips.REG_M0 + n, true
61 }
62 case "R":
63 if 0 <= n && n <= 31 {
64 return mips.REG_R0 + n, true
65 }
66 case "W":
67 if 0 <= n && n <= 31 {
68 return mips.REG_W0 + n, true
69 }
70 }
71 return 0, false
72 }
73
View as plain text