|
1 | 1 | /* LoadStoreRegister: LDR and STR */ |
| 2 | +union clause ast = LoadRegister : (reg_index, reg_index, reg_index) |
| 3 | +union clause ast = StoreRegister : (reg_index, reg_index, reg_index) |
| 4 | + |
2 | 5 | val decodeLoadStoreRegister : (bits(2), bits(5), bits(3), bit, bits(5), bits(5)) -> option(ast) |
3 | 6 |
|
4 | 7 | function clause decode (0b11@0b111@0b0@0b00@(opc:bits(2))@0b1@(Rm:bits(5))@(option_v:bits(3))@[S]@0b10@(Rn:bits(5))@(Rt:bits(5))) = { |
@@ -77,6 +80,8 @@ function clause execute StoreRegister(t, n, m) = { |
77 | 80 | } |
78 | 81 |
|
79 | 82 | /* Exclusive OR: EOR */ |
| 83 | +union clause ast = ExclusiveOr : (reg_index, reg_index, reg_index) |
| 84 | + |
80 | 85 | val decodeExclusiveOr : (bit, bits(2), bit, bits(5), bits(6), bits(5), bits(5)) -> option(ast) |
81 | 86 |
|
82 | 87 | function clause decode ([sf]@0b10@0b01010@(shift:bits(2))@[N]@(Rm:bits(5))@(imm6:bits(6))@(Rn:bits(5))@(Rd:bits(5))) = { |
@@ -109,6 +114,10 @@ function clause execute ExclusiveOr(d, n, m) = { |
109 | 114 | } |
110 | 115 |
|
111 | 116 | /* Data Barrier */ |
| 117 | +union clause ast = DataMemoryBarrier : MBReqTypes |
| 118 | +union clause ast = DataSynchronizationBarrier : MBReqTypes |
| 119 | +union clause ast = InstructionSynchronizationBarrier : unit |
| 120 | + |
112 | 121 | val decodeDataBarrier : (bits(4), bool) -> option(ast) |
113 | 122 |
|
114 | 123 | function decodeDataBarrier(CRm, is_sync) = { |
@@ -163,6 +172,8 @@ function clause execute InstructionSynchronizationBarrier() = { |
163 | 172 | } |
164 | 173 |
|
165 | 174 | /* CompareAndBranch: CBZ */ |
| 175 | +union clause ast = CompareAndBranch : (reg_index, bits(64)) |
| 176 | + |
166 | 177 | val decodeCompareAndBranch : (bits(19), bits(5)) -> option(ast) |
167 | 178 |
|
168 | 179 | function clause decode (0b1@0b011010@0b0@(imm19:bits(19))@(Rt:bits(5))) = { |
|
0 commit comments