add transcendentals
[libreriscv.git] / rv_major_opcode_1010011.mdwn
1 # Summary FP Opcodes
2
3 * Zfrsqrt - Recip SQRT <http://bugs.libre-riscv.org/show_bug.cgi?id=110>
4 * Zftrans - Transcendentals (FSIN, FCOS, FATAN, FPOW, FEXP, FLOG, FRCP)
5
6 # Main FP opcode 1010011 table
7
8 Proposed new encodings in **bold**
9
10 [[!table data="""
11 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
12 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | |
13 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
14 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
15 00000 | xx | rs2 | rs1 | rm | rd | 1010011 | FADD.xx |
16 00001 | xx | rs2 | rs1 | rm | rd | 1010011 | FSUB.xx |
17 00010 | xx | rs2 | rs1 | rm | rd | 1010011 | FMUL.xx |
18 00011 | xx | rs2 | rs1 | rm | rd | 1010011 | FDIV.xx |
19 00100 | xx | rs2 | rs1 | yyy | rd | 1010011 | tb=00100 |
20 00101 | xx | rs2 | rs1 | yyy | rd | 1010011 | tb=00101 |
21 00110 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
22 00111 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
23 01000 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
24 01001 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
25 01010 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
26 01011 | xx | xxxxx | rs1 | yyy | rd | 1010011 | tb=01011 |
27 01100 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
28 01101 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
29 01110 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
30 01111 | xx | rs2 | rs1 | yyy | rd | 1010011 | **FPOW.XX** |
31 10000 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
32 10001 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
33 10010 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
34 10011 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
35 10100 | xx | rs2 | rs1 | yyy | rd | 1010011 | tb=10100 |
36 10101 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
37 10110 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
38 10111 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
39 11000 | xx | xxxxx | rs1 | yyy | rd | 1010011 | tb=11000 |
40 11001 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
41 11010 | xx | xxxxx | rs1 | yyy | rd | 1010011 | tb=11010 |
42 11100 | xx | xxxxx | rs1 | 000 | rd | 1010011 | tb=11100 |
43 11101 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
44 11110 | xx | xxxxx | rs1 | 000 | rd | 1010011 | tb=11110 |
45 11111 | xx | rs2 | rs1 | yyy | rd | 1010011 | ? |
46 """]]
47
48 ## funct5 = 00100
49
50 [[!table data="""
51 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
52 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | |
53 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
54 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
55 00100 | xx | rs2 | rs1 | 000 | rd | 1010011 | FSGNJ.xx |
56 00100 | xx | rs2 | rs1 | 001 | rd | 1010011 | FSGNJN.xx |
57 00100 | xx | rs2 | rs1 | 010 | rd | 1010011 | FSGNJX.xx |
58 00100 | xx | rs2 | rs1 | 011 | rd | 1010011 | ?f3=011 |
59 00100 | xx | rs2 | rs1 | 100 | rd | 1010011 | ?f3=100 |
60 00100 | xx | rs2 | rs1 | 101 | rd | 1010011 | ?f3=101 |
61 00100 | xx | rs2 | rs1 | 110 | rd | 1010011 | ?f3=110 |
62 00100 | xx | rs2 | rs1 | 111 | rd | 1010011 | ?f3=111 |
63 """]]
64
65 # funct5 = 00101
66
67 [[!table data="""
68 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
69 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | |
70 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
71 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
72 00101 | xx | rs2 | rs1 | 000 | rd | 1010011 | FMIN.S |
73 00101 | xx | rs2 | rs1 | 001 | rd | 1010011 | FMAX.S |
74 00101 | xx | rs2 | rs1 | 010 | rd | 1010011 | ?f3=010 |
75 00101 | xx | rs2 | rs1 | 011 | rd | 1010011 | ?f3=011 |
76 00101 | xx | rs2 | rs1 | 100 | rd | 1010011 | ?f3=100 |
77 00101 | xx | rs2 | rs1 | 101 | rd | 1010011 | ?f3=101 |
78 00101 | xx | rs2 | rs1 | 110 | rd | 1010011 | ?f3=110 |
79 00101 | xx | rs2 | rs1 | 111 | rd | 1010011 | ?f3=111 |
80 """]]
81
82 # funct5 = 01011
83
84 [[!table data="""
85 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
86 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | |
87 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
88 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
89 01011 | xx | 00000 | rs1 | yyy | rd | 1010011 | FSQRT.xx |
90 01011 | xx | 00001 | rs1 | yyy | rd | 1010011 | **FRSQRT.xx** |
91 01011 | xx | 00010 | rs1 | yyy | rd | 1010011 | **FSIN.xx** |
92 01011 | xx | 00011 | rs1 | yyy | rd | 1010011 | **FCOS.xx** |
93 01011 | xx | 00100 | rs1 | yyy | rd | 1010011 | **FATAN.xx** |
94 01011 | xx | 00101 | rs1 | yyy | rd | 1010011 | **FEXP.xx** |
95 01011 | xx | 00110 | rs1 | yyy | rd | 1010011 | **FLOG.xx** |
96 01011 | xx | 00111 | rs1 | yyy | rd | 1010011 | **FRCP.xx** |
97 01011 | xx | 01000 | rs1 | yyy | rd | 1010011 | ? |
98 01011 | xx | 01001 | rs1 | yyy | rd | 1010011 | ? |
99 01011 | xx | 01010 | rs1 | yyy | rd | 1010011 | ? |
100 01011 | xx | 01011 | rs1 | yyy | rd | 1010011 | ? |
101 01011 | xx | 01100 | rs1 | yyy | rd | 1010011 | ? |
102 01011 | xx | 01101 | rs1 | yyy | rd | 1010011 | ? |
103 01011 | xx | 01110 | rs1 | yyy | rd | 1010011 | ? |
104 01011 | xx | 01111 | rs1 | yyy | rd | 1010011 | ? |
105 01011 | xx | 10000 | rs1 | yyy | rd | 1010011 | ? |
106 01011 | xx | 10001 | rs1 | yyy | rd | 1010011 | ? |
107 01011 | xx | 10010 | rs1 | yyy | rd | 1010011 | ? |
108 01011 | xx | 10011 | rs1 | yyy | rd | 1010011 | ? |
109 01011 | xx | 10100 | rs1 | yyy | rd | 1010011 | ? |
110 01011 | xx | 10101 | rs1 | yyy | rd | 1010011 | ? |
111 01011 | xx | 10110 | rs1 | yyy | rd | 1010011 | ? |
112 01011 | xx | 10111 | rs1 | yyy | rd | 1010011 | ? |
113 01011 | xx | 11000 | rs1 | yyy | rd | 1010011 | ? |
114 01011 | xx | 11001 | rs1 | yyy | rd | 1010011 | ? |
115 01011 | xx | 11010 | rs1 | yyy | rd | 1010011 | ? |
116 01011 | xx | 11011 | rs1 | yyy | rd | 1010011 | ? |
117 01011 | xx | 11100 | rs1 | yyy | rd | 1010011 | ? |
118 01011 | xx | 11101 | rs1 | yyy | rd | 1010011 | ? |
119 01011 | xx | 11110 | rs1 | yyy | rd | 1010011 | ? |
120 01011 | xx | 11111 | rs1 | yyy | rd | 1010011 | ? |
121 """]]
122
123 # funct5 = 10100
124
125 [[!table data="""
126 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
127 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | |
128 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
129 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
130 10100 | xx | rs2 | rs1 | 000 | rd | 1010011 | FLE.xx |
131 10100 | xx | rs2 | rs1 | 001 | rd | 1010011 | FLT.xx |
132 10100 | xx | rs2 | rs1 | 010 | rd | 1010011 | FEQ.xx |
133 10100 | xx | rs2 | rs1 | 011 | rd | 1010011 | ?f3=011 |
134 10100 | xx | rs2 | rs1 | 100 | rd | 1010011 | ?f3=100 |
135 10100 | xx | rs2 | rs1 | 101 | rd | 1010011 | ?f3=101 |
136 10100 | xx | rs2 | rs1 | 110 | rd | 1010011 | ?f3=110 |
137 10100 | xx | rs2 | rs1 | 111 | rd | 1010011 | ?f3=111 |
138 """]]
139
140 # funct5 = 11000
141
142 [[!table data="""
143 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
144 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | |
145 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
146 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
147 11000 | xx | 00000 | rs1 | rm | rd | 1010011 | FCVT.W.xx |
148 11000 | xx | 00001 | rs1 | rm | rd | 1010011 | FCVT.WU.xx |
149 11000 | xx | 00010 | rs1 | rm | rd | 1010011 | FCVT.L.xx |
150 11000 | xx | 00011 | rs1 | rm | rd | 1010011 | FCVT.LU.xx |
151 11000 | xx | xxxxx | rs1 | rm | rd | 1010011 | rs2? |
152 """]]
153
154 # funct5 = 11010
155
156 [[!table data="""
157 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
158 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | |
159 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
160 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
161 11010 | xx | 00000 | rs1 | rm | rd | 1010011 | FCVT.xx.W |
162 11010 | xx | 00001 | rs1 | rm | rd | 1010011 | FCVT.xx.WU |
163 11010 | xx | 00010 | rs1 | rm | rd | 1010011 | FCVT.xx.L |
164 11010 | xx | 00011 | rs1 | rm | rd | 1010011 | FCVT.xx.LU |
165 11010 | xx | xxxxx | rs1 | rm | rd | 1010011 | rs2? |
166 """]]
167
168 # funct5 = 11100
169
170 [[!table data="""
171 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
172 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | |
173 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
174 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
175 11100 | xx | 00000 | rs1 | 000 | rd | 1010011 | FMV.xx.W |
176 11100 | xx | 00000 | rs1 | 001 | rd | 1010011 | FCLASS.xx |
177 11100 | xx | xxxxx | rs1 | yyy | rd | 1010011 | rs2? f3? |
178 """]]
179
180 # funct5 = 11110
181
182 [[!table data="""
183 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
184 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | |
185 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
186 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
187 11110 | xx | 00000 | rs1 | 000 | rd | 1010011 | FMV.W.xx |
188 11110 | xx | xxxxx | rs1 | yyy | rd | 1010011 | rs2? f3? |
189 """]]
190
191 # funct5 = ?????
192
193 [[!table data="""
194 31..27 | 26..25 | 24..20 |19..15| 14...12| 11..7 | 6....0 | function |
195 funct5 | SDHQ | rs2 | rs1 | funct3 | rd | opcode | |
196 5 | 2 | 5 | 5 | 3 | 5 | 7 | |
197 ------ | ----- | ----- | -----| ----- | ----- | ------- | -------- |
198 """]]
199