| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/globals.h" | 5 #include "vm/globals.h" |
| 6 #if defined(TARGET_ARCH_MIPS) | 6 #if defined(TARGET_ARCH_MIPS) |
| 7 | 7 |
| 8 #include "vm/assembler.h" | 8 #include "vm/assembler.h" |
| 9 #include "vm/os.h" | 9 #include "vm/os.h" |
| 10 #include "vm/unit_test.h" | 10 #include "vm/unit_test.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 | 46 |
| 47 | 47 |
| 48 ASSEMBLER_TEST_RUN(Addiu_overflow, test) { | 48 ASSEMBLER_TEST_RUN(Addiu_overflow, test) { |
| 49 typedef int (*SimpleCode)(); | 49 typedef int (*SimpleCode)(); |
| 50 EXPECT_EQ(static_cast<int32_t>(0x80000000), | 50 EXPECT_EQ(static_cast<int32_t>(0x80000000), |
| 51 EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 51 EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 52 } | 52 } |
| 53 | 53 |
| 54 | 54 |
| 55 ASSEMBLER_TEST_GENERATE(Addu, assembler) { | 55 ASSEMBLER_TEST_GENERATE(Addu, assembler) { |
| 56 __ addiu(R2, ZR, Immediate(21)); | 56 __ addiu(T2, ZR, Immediate(21)); |
| 57 __ addiu(R3, ZR, Immediate(21)); | 57 __ addiu(T3, ZR, Immediate(21)); |
| 58 __ addu(V0, R2, R3); | 58 __ addu(V0, T2, T3); |
| 59 __ jr(RA); | 59 __ jr(RA); |
| 60 } | 60 } |
| 61 | 61 |
| 62 | 62 |
| 63 ASSEMBLER_TEST_RUN(Addu, test) { | 63 ASSEMBLER_TEST_RUN(Addu, test) { |
| 64 typedef int (*SimpleCode)(); | 64 typedef int (*SimpleCode)(); |
| 65 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 65 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 66 } | 66 } |
| 67 | 67 |
| 68 | 68 |
| 69 ASSEMBLER_TEST_GENERATE(Addu_overflow, assembler) { | 69 ASSEMBLER_TEST_GENERATE(Addu_overflow, assembler) { |
| 70 __ LoadImmediate(R2, 0x7fffffff); | 70 __ LoadImmediate(T2, 0x7fffffff); |
| 71 __ addiu(R3, R0, Immediate(1)); | 71 __ addiu(T3, R0, Immediate(1)); |
| 72 __ addu(V0, R2, R3); | 72 __ addu(V0, T2, T3); |
| 73 __ jr(RA); | 73 __ jr(RA); |
| 74 } | 74 } |
| 75 | 75 |
| 76 | 76 |
| 77 ASSEMBLER_TEST_RUN(Addu_overflow, test) { | 77 ASSEMBLER_TEST_RUN(Addu_overflow, test) { |
| 78 typedef int (*SimpleCode)(); | 78 typedef int (*SimpleCode)(); |
| 79 EXPECT_EQ(static_cast<int32_t>(0x80000000), | 79 EXPECT_EQ(static_cast<int32_t>(0x80000000), |
| 80 EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 80 EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 81 } | 81 } |
| 82 | 82 |
| 83 | 83 |
| 84 ASSEMBLER_TEST_GENERATE(And, assembler) { | 84 ASSEMBLER_TEST_GENERATE(And, assembler) { |
| 85 __ addiu(R2, ZR, Immediate(42)); | 85 __ addiu(T2, ZR, Immediate(42)); |
| 86 __ addiu(R3, ZR, Immediate(2)); | 86 __ addiu(T3, ZR, Immediate(2)); |
| 87 __ and_(V0, R2, R3); | 87 __ and_(V0, T2, T3); |
| 88 __ jr(RA); | 88 __ jr(RA); |
| 89 } | 89 } |
| 90 | 90 |
| 91 | 91 |
| 92 ASSEMBLER_TEST_RUN(And, test) { | 92 ASSEMBLER_TEST_RUN(And, test) { |
| 93 typedef int (*SimpleCode)(); | 93 typedef int (*SimpleCode)(); |
| 94 EXPECT_EQ(2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 94 EXPECT_EQ(2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 95 } | 95 } |
| 96 | 96 |
| 97 | 97 |
| 98 ASSEMBLER_TEST_GENERATE(Andi, assembler) { | 98 ASSEMBLER_TEST_GENERATE(Andi, assembler) { |
| 99 __ addiu(R1, ZR, Immediate(42)); | 99 __ addiu(T1, ZR, Immediate(42)); |
| 100 __ andi(V0, R1, Immediate(2)); | 100 __ andi(V0, T1, Immediate(2)); |
| 101 __ jr(RA); | 101 __ jr(RA); |
| 102 } | 102 } |
| 103 | 103 |
| 104 | 104 |
| 105 ASSEMBLER_TEST_RUN(Andi, test) { | 105 ASSEMBLER_TEST_RUN(Andi, test) { |
| 106 typedef int (*SimpleCode)(); | 106 typedef int (*SimpleCode)(); |
| 107 EXPECT_EQ(2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 107 EXPECT_EQ(2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 108 } | 108 } |
| 109 | 109 |
| 110 | 110 |
| 111 ASSEMBLER_TEST_GENERATE(Clo, assembler) { | 111 ASSEMBLER_TEST_GENERATE(Clo, assembler) { |
| 112 __ addiu(R1, ZR, Immediate(-1)); | 112 __ addiu(T1, ZR, Immediate(-1)); |
| 113 __ clo(V0, R1); | 113 __ clo(V0, T1); |
| 114 __ jr(RA); | 114 __ jr(RA); |
| 115 } | 115 } |
| 116 | 116 |
| 117 | 117 |
| 118 ASSEMBLER_TEST_RUN(Clo, test) { | 118 ASSEMBLER_TEST_RUN(Clo, test) { |
| 119 typedef int (*SimpleCode)(); | 119 typedef int (*SimpleCode)(); |
| 120 EXPECT_EQ(32, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 120 EXPECT_EQ(32, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 121 } | 121 } |
| 122 | 122 |
| 123 | 123 |
| 124 ASSEMBLER_TEST_GENERATE(Clz, assembler) { | 124 ASSEMBLER_TEST_GENERATE(Clz, assembler) { |
| 125 __ addiu(R1, ZR, Immediate(0x7fff)); | 125 __ addiu(T1, ZR, Immediate(0x7fff)); |
| 126 __ clz(V0, R1); | 126 __ clz(V0, T1); |
| 127 __ jr(RA); | 127 __ jr(RA); |
| 128 } | 128 } |
| 129 | 129 |
| 130 | 130 |
| 131 ASSEMBLER_TEST_RUN(Clz, test) { | 131 ASSEMBLER_TEST_RUN(Clz, test) { |
| 132 typedef int (*SimpleCode)(); | 132 typedef int (*SimpleCode)(); |
| 133 EXPECT_EQ(17, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 133 EXPECT_EQ(17, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 134 } | 134 } |
| 135 | 135 |
| 136 | 136 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 156 } | 156 } |
| 157 | 157 |
| 158 | 158 |
| 159 ASSEMBLER_TEST_RUN(MthiMfhi, test) { | 159 ASSEMBLER_TEST_RUN(MthiMfhi, test) { |
| 160 typedef int (*SimpleCode)(); | 160 typedef int (*SimpleCode)(); |
| 161 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 161 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 162 } | 162 } |
| 163 | 163 |
| 164 | 164 |
| 165 ASSEMBLER_TEST_GENERATE(Divu, assembler) { | 165 ASSEMBLER_TEST_GENERATE(Divu, assembler) { |
| 166 __ addiu(R1, ZR, Immediate(27)); | 166 __ addiu(T1, ZR, Immediate(27)); |
| 167 __ addiu(R2, ZR, Immediate(9)); | 167 __ addiu(T2, ZR, Immediate(9)); |
| 168 __ divu(R1, R2); | 168 __ divu(T1, T2); |
| 169 __ mflo(V0); | 169 __ mflo(V0); |
| 170 __ jr(RA); | 170 __ jr(RA); |
| 171 } | 171 } |
| 172 | 172 |
| 173 | 173 |
| 174 ASSEMBLER_TEST_RUN(Divu, test) { | 174 ASSEMBLER_TEST_RUN(Divu, test) { |
| 175 typedef int (*SimpleCode)(); | 175 typedef int (*SimpleCode)(); |
| 176 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 176 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 177 } | 177 } |
| 178 | 178 |
| 179 | 179 |
| 180 ASSEMBLER_TEST_GENERATE(Div, assembler) { | 180 ASSEMBLER_TEST_GENERATE(Div, assembler) { |
| 181 __ addiu(R1, ZR, Immediate(27)); | 181 __ addiu(T1, ZR, Immediate(27)); |
| 182 __ addiu(R2, ZR, Immediate(9)); | 182 __ addiu(T2, ZR, Immediate(9)); |
| 183 __ div(R1, R2); | 183 __ div(T1, T2); |
| 184 __ mflo(V0); | 184 __ mflo(V0); |
| 185 __ jr(RA); | 185 __ jr(RA); |
| 186 } | 186 } |
| 187 | 187 |
| 188 | 188 |
| 189 ASSEMBLER_TEST_RUN(Div, test) { | 189 ASSEMBLER_TEST_RUN(Div, test) { |
| 190 typedef int (*SimpleCode)(); | 190 typedef int (*SimpleCode)(); |
| 191 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 191 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 192 } | 192 } |
| 193 | 193 |
| 194 | 194 |
| 195 ASSEMBLER_TEST_GENERATE(Divu_corner, assembler) { | 195 ASSEMBLER_TEST_GENERATE(Divu_corner, assembler) { |
| 196 __ LoadImmediate(R1, 0x80000000); | 196 __ LoadImmediate(T1, 0x80000000); |
| 197 __ LoadImmediate(R2, 0xffffffff); | 197 __ LoadImmediate(T2, 0xffffffff); |
| 198 __ divu(R1, R2); | 198 __ divu(T1, T2); |
| 199 __ mflo(V0); | 199 __ mflo(V0); |
| 200 __ jr(RA); | 200 __ jr(RA); |
| 201 } | 201 } |
| 202 | 202 |
| 203 | 203 |
| 204 ASSEMBLER_TEST_RUN(Divu_corner, test) { | 204 ASSEMBLER_TEST_RUN(Divu_corner, test) { |
| 205 typedef int (*SimpleCode)(); | 205 typedef int (*SimpleCode)(); |
| 206 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 206 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 207 } | 207 } |
| 208 | 208 |
| 209 | 209 |
| 210 ASSEMBLER_TEST_GENERATE(Div_corner, assembler) { | 210 ASSEMBLER_TEST_GENERATE(Div_corner, assembler) { |
| 211 __ LoadImmediate(R1, 0x80000000); | 211 __ LoadImmediate(T1, 0x80000000); |
| 212 __ LoadImmediate(R2, 0xffffffff); | 212 __ LoadImmediate(T2, 0xffffffff); |
| 213 __ div(R1, R2); | 213 __ div(T1, T2); |
| 214 __ mflo(V0); | 214 __ mflo(V0); |
| 215 __ jr(RA); | 215 __ jr(RA); |
| 216 } | 216 } |
| 217 | 217 |
| 218 | 218 |
| 219 ASSEMBLER_TEST_RUN(Div_corner, test) { | 219 ASSEMBLER_TEST_RUN(Div_corner, test) { |
| 220 typedef int (*SimpleCode)(); | 220 typedef int (*SimpleCode)(); |
| 221 EXPECT_EQ(static_cast<int32_t>(0x80000000), | 221 EXPECT_EQ(static_cast<int32_t>(0x80000000), |
| 222 EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 222 EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 223 } | 223 } |
| 224 | 224 |
| 225 | 225 |
| 226 ASSEMBLER_TEST_GENERATE(Lb, assembler) { | 226 ASSEMBLER_TEST_GENERATE(Lb, assembler) { |
| 227 __ addiu(SP, SP, Immediate(-kWordSize * 30)); | 227 __ addiu(SP, SP, Immediate(-kWordSize * 30)); |
| 228 __ LoadImmediate(R1, 0xff); | 228 __ LoadImmediate(T1, 0xff); |
| 229 __ sb(R1, Address(SP)); | 229 __ sb(T1, Address(SP)); |
| 230 __ lb(V0, Address(SP)); | 230 __ lb(V0, Address(SP)); |
| 231 __ addiu(SP, SP, Immediate(kWordSize * 30)); | 231 __ addiu(SP, SP, Immediate(kWordSize * 30)); |
| 232 __ jr(RA); | 232 __ jr(RA); |
| 233 } | 233 } |
| 234 | 234 |
| 235 | 235 |
| 236 ASSEMBLER_TEST_RUN(Lb, test) { | 236 ASSEMBLER_TEST_RUN(Lb, test) { |
| 237 typedef int (*SimpleCode)(); | 237 typedef int (*SimpleCode)(); |
| 238 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 238 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 239 } | 239 } |
| 240 | 240 |
| 241 | 241 |
| 242 ASSEMBLER_TEST_GENERATE(Lb_offset, assembler) { | 242 ASSEMBLER_TEST_GENERATE(Lb_offset, assembler) { |
| 243 __ addiu(SP, SP, Immediate(-kWordSize * 30)); | 243 __ addiu(SP, SP, Immediate(-kWordSize * 30)); |
| 244 __ LoadImmediate(R1, 0xff); | 244 __ LoadImmediate(T1, 0xff); |
| 245 __ sb(R1, Address(SP, 1)); | 245 __ sb(T1, Address(SP, 1)); |
| 246 __ lb(V0, Address(SP, 1)); | 246 __ lb(V0, Address(SP, 1)); |
| 247 __ addiu(SP, SP, Immediate(kWordSize * 30)); | 247 __ addiu(SP, SP, Immediate(kWordSize * 30)); |
| 248 __ jr(RA); | 248 __ jr(RA); |
| 249 } | 249 } |
| 250 | 250 |
| 251 | 251 |
| 252 ASSEMBLER_TEST_RUN(Lb_offset, test) { | 252 ASSEMBLER_TEST_RUN(Lb_offset, test) { |
| 253 typedef int (*SimpleCode)(); | 253 typedef int (*SimpleCode)(); |
| 254 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 254 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 255 } | 255 } |
| 256 | 256 |
| 257 | 257 |
| 258 ASSEMBLER_TEST_GENERATE(Lbu, assembler) { | 258 ASSEMBLER_TEST_GENERATE(Lbu, assembler) { |
| 259 __ addiu(SP, SP, Immediate(-kWordSize * 30)); | 259 __ addiu(SP, SP, Immediate(-kWordSize * 30)); |
| 260 __ LoadImmediate(R1, 0xff); | 260 __ LoadImmediate(T1, 0xff); |
| 261 __ sb(R1, Address(SP)); | 261 __ sb(T1, Address(SP)); |
| 262 __ lbu(V0, Address(SP)); | 262 __ lbu(V0, Address(SP)); |
| 263 __ addiu(SP, SP, Immediate(kWordSize * 30)); | 263 __ addiu(SP, SP, Immediate(kWordSize * 30)); |
| 264 __ jr(RA); | 264 __ jr(RA); |
| 265 } | 265 } |
| 266 | 266 |
| 267 | 267 |
| 268 ASSEMBLER_TEST_RUN(Lbu, test) { | 268 ASSEMBLER_TEST_RUN(Lbu, test) { |
| 269 typedef int (*SimpleCode)(); | 269 typedef int (*SimpleCode)(); |
| 270 EXPECT_EQ(255, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 270 EXPECT_EQ(255, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 271 } | 271 } |
| 272 | 272 |
| 273 | 273 |
| 274 ASSEMBLER_TEST_GENERATE(Lh, assembler) { | 274 ASSEMBLER_TEST_GENERATE(Lh, assembler) { |
| 275 __ addiu(SP, SP, Immediate(-kWordSize * 30)); | 275 __ addiu(SP, SP, Immediate(-kWordSize * 30)); |
| 276 __ LoadImmediate(R1, 0xffff); | 276 __ LoadImmediate(T1, 0xffff); |
| 277 __ sh(R1, Address(SP)); | 277 __ sh(T1, Address(SP)); |
| 278 __ lh(V0, Address(SP)); | 278 __ lh(V0, Address(SP)); |
| 279 __ addiu(SP, SP, Immediate(kWordSize * 30)); | 279 __ addiu(SP, SP, Immediate(kWordSize * 30)); |
| 280 __ jr(RA); | 280 __ jr(RA); |
| 281 } | 281 } |
| 282 | 282 |
| 283 | 283 |
| 284 ASSEMBLER_TEST_RUN(Lh, test) { | 284 ASSEMBLER_TEST_RUN(Lh, test) { |
| 285 typedef int (*SimpleCode)(); | 285 typedef int (*SimpleCode)(); |
| 286 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 286 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 287 } | 287 } |
| 288 | 288 |
| 289 | 289 |
| 290 ASSEMBLER_TEST_GENERATE(Lhu, assembler) { | 290 ASSEMBLER_TEST_GENERATE(Lhu, assembler) { |
| 291 __ addiu(SP, SP, Immediate(-kWordSize * 30)); | 291 __ addiu(SP, SP, Immediate(-kWordSize * 30)); |
| 292 __ LoadImmediate(R1, 0xffff); | 292 __ LoadImmediate(T1, 0xffff); |
| 293 __ sh(R1, Address(SP)); | 293 __ sh(T1, Address(SP)); |
| 294 __ lhu(V0, Address(SP)); | 294 __ lhu(V0, Address(SP)); |
| 295 __ addiu(SP, SP, Immediate(kWordSize * 30)); | 295 __ addiu(SP, SP, Immediate(kWordSize * 30)); |
| 296 __ jr(RA); | 296 __ jr(RA); |
| 297 } | 297 } |
| 298 | 298 |
| 299 | 299 |
| 300 ASSEMBLER_TEST_RUN(Lhu, test) { | 300 ASSEMBLER_TEST_RUN(Lhu, test) { |
| 301 typedef int (*SimpleCode)(); | 301 typedef int (*SimpleCode)(); |
| 302 EXPECT_EQ(65535, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 302 EXPECT_EQ(65535, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 303 } | 303 } |
| 304 | 304 |
| 305 | 305 |
| 306 ASSEMBLER_TEST_GENERATE(Lw, assembler) { | 306 ASSEMBLER_TEST_GENERATE(Lw, assembler) { |
| 307 __ addiu(SP, SP, Immediate(-kWordSize * 30)); | 307 __ addiu(SP, SP, Immediate(-kWordSize * 30)); |
| 308 __ LoadImmediate(R1, -1); | 308 __ LoadImmediate(T1, -1); |
| 309 __ sw(R1, Address(SP)); | 309 __ sw(T1, Address(SP)); |
| 310 __ lw(V0, Address(SP)); | 310 __ lw(V0, Address(SP)); |
| 311 __ addiu(SP, SP, Immediate(kWordSize * 30)); | 311 __ addiu(SP, SP, Immediate(kWordSize * 30)); |
| 312 __ jr(RA); | 312 __ jr(RA); |
| 313 } | 313 } |
| 314 | 314 |
| 315 | 315 |
| 316 ASSEMBLER_TEST_RUN(Lw, test) { | 316 ASSEMBLER_TEST_RUN(Lw, test) { |
| 317 typedef int (*SimpleCode)(); | 317 typedef int (*SimpleCode)(); |
| 318 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 318 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 319 } | 319 } |
| 320 | 320 |
| 321 | 321 |
| 322 ASSEMBLER_TEST_GENERATE(Lui, assembler) { | 322 ASSEMBLER_TEST_GENERATE(Lui, assembler) { |
| 323 __ lui(V0, Immediate(42)); | 323 __ lui(V0, Immediate(42)); |
| 324 __ jr(RA); | 324 __ jr(RA); |
| 325 } | 325 } |
| 326 | 326 |
| 327 | 327 |
| 328 ASSEMBLER_TEST_RUN(Lui, test) { | 328 ASSEMBLER_TEST_RUN(Lui, test) { |
| 329 typedef int (*SimpleCode)(); | 329 typedef int (*SimpleCode)(); |
| 330 EXPECT_EQ(42 << 16, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 330 EXPECT_EQ(42 << 16, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 331 } | 331 } |
| 332 | 332 |
| 333 | 333 |
| 334 ASSEMBLER_TEST_GENERATE(Sll, assembler) { | 334 ASSEMBLER_TEST_GENERATE(Sll, assembler) { |
| 335 __ LoadImmediate(R1, 21); | 335 __ LoadImmediate(T1, 21); |
| 336 __ sll(V0, R1, 1); | 336 __ sll(V0, T1, 1); |
| 337 __ jr(RA); | 337 __ jr(RA); |
| 338 } | 338 } |
| 339 | 339 |
| 340 | 340 |
| 341 ASSEMBLER_TEST_RUN(Sll, test) { | 341 ASSEMBLER_TEST_RUN(Sll, test) { |
| 342 typedef int (*SimpleCode)(); | 342 typedef int (*SimpleCode)(); |
| 343 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 343 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 344 } | 344 } |
| 345 | 345 |
| 346 | 346 |
| 347 ASSEMBLER_TEST_GENERATE(Srl, assembler) { | 347 ASSEMBLER_TEST_GENERATE(Srl, assembler) { |
| 348 __ LoadImmediate(R1, 84); | 348 __ LoadImmediate(T1, 84); |
| 349 __ srl(V0, R1, 1); | 349 __ srl(V0, T1, 1); |
| 350 __ jr(RA); | 350 __ jr(RA); |
| 351 } | 351 } |
| 352 | 352 |
| 353 | 353 |
| 354 ASSEMBLER_TEST_RUN(Srl, test) { | 354 ASSEMBLER_TEST_RUN(Srl, test) { |
| 355 typedef int (*SimpleCode)(); | 355 typedef int (*SimpleCode)(); |
| 356 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 356 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 357 } | 357 } |
| 358 | 358 |
| 359 | 359 |
| 360 ASSEMBLER_TEST_GENERATE(LShifting, assembler) { | 360 ASSEMBLER_TEST_GENERATE(LShifting, assembler) { |
| 361 __ LoadImmediate(R1, 1); | 361 __ LoadImmediate(T1, 1); |
| 362 __ sll(R1, R1, 31); | 362 __ sll(T1, T1, 31); |
| 363 __ srl(V0, R1, 31); | 363 __ srl(V0, T1, 31); |
| 364 __ jr(RA); | 364 __ jr(RA); |
| 365 } | 365 } |
| 366 | 366 |
| 367 | 367 |
| 368 ASSEMBLER_TEST_RUN(LShifting, test) { | 368 ASSEMBLER_TEST_RUN(LShifting, test) { |
| 369 typedef int (*SimpleCode)(); | 369 typedef int (*SimpleCode)(); |
| 370 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 370 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 371 } | 371 } |
| 372 | 372 |
| 373 | 373 |
| 374 ASSEMBLER_TEST_GENERATE(RShifting, assembler) { | 374 ASSEMBLER_TEST_GENERATE(RShifting, assembler) { |
| 375 __ LoadImmediate(R1, 1); | 375 __ LoadImmediate(T1, 1); |
| 376 __ sll(R1, R1, 31); | 376 __ sll(T1, T1, 31); |
| 377 __ sra(V0, R1, 31); | 377 __ sra(V0, T1, 31); |
| 378 __ jr(RA); | 378 __ jr(RA); |
| 379 } | 379 } |
| 380 | 380 |
| 381 | 381 |
| 382 ASSEMBLER_TEST_RUN(RShifting, test) { | 382 ASSEMBLER_TEST_RUN(RShifting, test) { |
| 383 typedef int (*SimpleCode)(); | 383 typedef int (*SimpleCode)(); |
| 384 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 384 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 385 } | 385 } |
| 386 | 386 |
| 387 | 387 |
| 388 ASSEMBLER_TEST_GENERATE(Sllv, assembler) { | 388 ASSEMBLER_TEST_GENERATE(Sllv, assembler) { |
| 389 __ LoadImmediate(R1, 21); | 389 __ LoadImmediate(T1, 21); |
| 390 __ LoadImmediate(R2, 1); | 390 __ LoadImmediate(T2, 1); |
| 391 __ sllv(V0, R1, R2); | 391 __ sllv(V0, T1, T2); |
| 392 __ jr(RA); | 392 __ jr(RA); |
| 393 } | 393 } |
| 394 | 394 |
| 395 | 395 |
| 396 ASSEMBLER_TEST_RUN(Sllv, test) { | 396 ASSEMBLER_TEST_RUN(Sllv, test) { |
| 397 typedef int (*SimpleCode)(); | 397 typedef int (*SimpleCode)(); |
| 398 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 398 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 399 } | 399 } |
| 400 | 400 |
| 401 | 401 |
| 402 ASSEMBLER_TEST_GENERATE(Srlv, assembler) { | 402 ASSEMBLER_TEST_GENERATE(Srlv, assembler) { |
| 403 __ LoadImmediate(R1, 84); | 403 __ LoadImmediate(T1, 84); |
| 404 __ LoadImmediate(R2, 1); | 404 __ LoadImmediate(T2, 1); |
| 405 __ srlv(V0, R1, R2); | 405 __ srlv(V0, T1, T2); |
| 406 __ jr(RA); | 406 __ jr(RA); |
| 407 } | 407 } |
| 408 | 408 |
| 409 | 409 |
| 410 ASSEMBLER_TEST_RUN(Srlv, test) { | 410 ASSEMBLER_TEST_RUN(Srlv, test) { |
| 411 typedef int (*SimpleCode)(); | 411 typedef int (*SimpleCode)(); |
| 412 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 412 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 413 } | 413 } |
| 414 | 414 |
| 415 | 415 |
| 416 ASSEMBLER_TEST_GENERATE(LShiftingV, assembler) { | 416 ASSEMBLER_TEST_GENERATE(LShiftingV, assembler) { |
| 417 __ LoadImmediate(R1, 1); | 417 __ LoadImmediate(T1, 1); |
| 418 __ LoadImmediate(R2, 31); | 418 __ LoadImmediate(T2, 31); |
| 419 __ sllv(R1, R1, R2); | 419 __ sllv(T1, T1, T2); |
| 420 __ srlv(V0, R1, R2); | 420 __ srlv(V0, T1, T2); |
| 421 __ jr(RA); | 421 __ jr(RA); |
| 422 } | 422 } |
| 423 | 423 |
| 424 | 424 |
| 425 ASSEMBLER_TEST_RUN(LShiftingV, test) { | 425 ASSEMBLER_TEST_RUN(LShiftingV, test) { |
| 426 typedef int (*SimpleCode)(); | 426 typedef int (*SimpleCode)(); |
| 427 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 427 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 428 } | 428 } |
| 429 | 429 |
| 430 | 430 |
| 431 ASSEMBLER_TEST_GENERATE(RShiftingV, assembler) { | 431 ASSEMBLER_TEST_GENERATE(RShiftingV, assembler) { |
| 432 __ LoadImmediate(R1, 1); | 432 __ LoadImmediate(T1, 1); |
| 433 __ LoadImmediate(R2, 31); | 433 __ LoadImmediate(T2, 31); |
| 434 __ sllv(R1, R1, R2); | 434 __ sllv(T1, T1, T2); |
| 435 __ srav(V0, R1, R2); | 435 __ srav(V0, T1, T2); |
| 436 __ jr(RA); | 436 __ jr(RA); |
| 437 } | 437 } |
| 438 | 438 |
| 439 | 439 |
| 440 ASSEMBLER_TEST_RUN(RShiftingV, test) { | 440 ASSEMBLER_TEST_RUN(RShiftingV, test) { |
| 441 typedef int (*SimpleCode)(); | 441 typedef int (*SimpleCode)(); |
| 442 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 442 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 443 } | 443 } |
| 444 | 444 |
| 445 | 445 |
| 446 ASSEMBLER_TEST_GENERATE(Mult_pos, assembler) { | 446 ASSEMBLER_TEST_GENERATE(Mult_pos, assembler) { |
| 447 __ LoadImmediate(R1, 6); | 447 __ LoadImmediate(T1, 6); |
| 448 __ LoadImmediate(R2, 7); | 448 __ LoadImmediate(T2, 7); |
| 449 __ mult(R1, R2); | 449 __ mult(T1, T2); |
| 450 __ mflo(V0); | 450 __ mflo(V0); |
| 451 __ jr(RA); | 451 __ jr(RA); |
| 452 } | 452 } |
| 453 | 453 |
| 454 | 454 |
| 455 ASSEMBLER_TEST_RUN(Mult_pos, test) { | 455 ASSEMBLER_TEST_RUN(Mult_pos, test) { |
| 456 typedef int (*SimpleCode)(); | 456 typedef int (*SimpleCode)(); |
| 457 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 457 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 458 } | 458 } |
| 459 | 459 |
| 460 | 460 |
| 461 ASSEMBLER_TEST_GENERATE(Mult_neg, assembler) { | 461 ASSEMBLER_TEST_GENERATE(Mult_neg, assembler) { |
| 462 __ LoadImmediate(R1, -6); | 462 __ LoadImmediate(T1, -6); |
| 463 __ LoadImmediate(R2, 7); | 463 __ LoadImmediate(T2, 7); |
| 464 __ mult(R1, R2); | 464 __ mult(T1, T2); |
| 465 __ mflo(V0); | 465 __ mflo(V0); |
| 466 __ jr(RA); | 466 __ jr(RA); |
| 467 } | 467 } |
| 468 | 468 |
| 469 | 469 |
| 470 ASSEMBLER_TEST_RUN(Mult_neg, test) { | 470 ASSEMBLER_TEST_RUN(Mult_neg, test) { |
| 471 typedef int (*SimpleCode)(); | 471 typedef int (*SimpleCode)(); |
| 472 EXPECT_EQ(-42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 472 EXPECT_EQ(-42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 473 } | 473 } |
| 474 | 474 |
| 475 | 475 |
| 476 ASSEMBLER_TEST_GENERATE(Mult_neg_hi, assembler) { | 476 ASSEMBLER_TEST_GENERATE(Mult_neg_hi, assembler) { |
| 477 __ LoadImmediate(R1, -6); | 477 __ LoadImmediate(T1, -6); |
| 478 __ LoadImmediate(R2, 7); | 478 __ LoadImmediate(T2, 7); |
| 479 __ mult(R1, R2); | 479 __ mult(T1, T2); |
| 480 __ mfhi(V0); | 480 __ mfhi(V0); |
| 481 __ jr(RA); | 481 __ jr(RA); |
| 482 } | 482 } |
| 483 | 483 |
| 484 | 484 |
| 485 ASSEMBLER_TEST_RUN(Mult_neg_hi, test) { | 485 ASSEMBLER_TEST_RUN(Mult_neg_hi, test) { |
| 486 typedef int (*SimpleCode)(); | 486 typedef int (*SimpleCode)(); |
| 487 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 487 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 488 } | 488 } |
| 489 | 489 |
| 490 | 490 |
| 491 ASSEMBLER_TEST_GENERATE(Multu_lo, assembler) { | 491 ASSEMBLER_TEST_GENERATE(Multu_lo, assembler) { |
| 492 __ LoadImmediate(R1, 6); | 492 __ LoadImmediate(T1, 6); |
| 493 __ LoadImmediate(R2, 7); | 493 __ LoadImmediate(T2, 7); |
| 494 __ multu(R1, R2); | 494 __ multu(T1, T2); |
| 495 __ mflo(V0); | 495 __ mflo(V0); |
| 496 __ jr(RA); | 496 __ jr(RA); |
| 497 } | 497 } |
| 498 | 498 |
| 499 | 499 |
| 500 ASSEMBLER_TEST_RUN(Multu_lo, test) { | 500 ASSEMBLER_TEST_RUN(Multu_lo, test) { |
| 501 typedef int (*SimpleCode)(); | 501 typedef int (*SimpleCode)(); |
| 502 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 502 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 503 } | 503 } |
| 504 | 504 |
| 505 | 505 |
| 506 ASSEMBLER_TEST_GENERATE(Multu_hi, assembler) { | 506 ASSEMBLER_TEST_GENERATE(Multu_hi, assembler) { |
| 507 __ LoadImmediate(R1, 65536); | 507 __ LoadImmediate(T1, 65536); |
| 508 __ LoadImmediate(R2, 65536); | 508 __ LoadImmediate(T2, 65536); |
| 509 __ multu(R1, R2); | 509 __ multu(T1, T2); |
| 510 __ mfhi(V0); | 510 __ mfhi(V0); |
| 511 __ jr(RA); | 511 __ jr(RA); |
| 512 } | 512 } |
| 513 | 513 |
| 514 | 514 |
| 515 ASSEMBLER_TEST_RUN(Multu_hi, test) { | 515 ASSEMBLER_TEST_RUN(Multu_hi, test) { |
| 516 typedef int (*SimpleCode)(); | 516 typedef int (*SimpleCode)(); |
| 517 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 517 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 518 } | 518 } |
| 519 | 519 |
| 520 | 520 |
| 521 ASSEMBLER_TEST_GENERATE(Madd_neg, assembler) { | 521 ASSEMBLER_TEST_GENERATE(Madd_neg, assembler) { |
| 522 __ LoadImmediate(R1, -6); | 522 __ LoadImmediate(T1, -6); |
| 523 __ LoadImmediate(R2, 7); | 523 __ LoadImmediate(T2, 7); |
| 524 __ mult(R1, R2); | 524 __ mult(T1, T2); |
| 525 __ madd(R1, R2); | 525 __ madd(T1, T2); |
| 526 __ mflo(V0); | 526 __ mflo(V0); |
| 527 __ mfhi(V1); | 527 __ mfhi(V1); |
| 528 __ jr(RA); | 528 __ jr(RA); |
| 529 } | 529 } |
| 530 | 530 |
| 531 | 531 |
| 532 ASSEMBLER_TEST_RUN(Madd_neg, test) { | 532 ASSEMBLER_TEST_RUN(Madd_neg, test) { |
| 533 typedef int (*SimpleCode)(); | 533 typedef int (*SimpleCode)(); |
| 534 EXPECT_EQ(-84, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 534 EXPECT_EQ(-84, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 535 } | 535 } |
| 536 | 536 |
| 537 | 537 |
| 538 ASSEMBLER_TEST_GENERATE(Subu, assembler) { | 538 ASSEMBLER_TEST_GENERATE(Subu, assembler) { |
| 539 __ LoadImmediate(R1, 737); | 539 __ LoadImmediate(T1, 737); |
| 540 __ LoadImmediate(R2, 695); | 540 __ LoadImmediate(T2, 695); |
| 541 __ subu(V0, R1, R2); | 541 __ subu(V0, T1, T2); |
| 542 __ jr(RA); | 542 __ jr(RA); |
| 543 } | 543 } |
| 544 | 544 |
| 545 | 545 |
| 546 ASSEMBLER_TEST_RUN(Subu, test) { | 546 ASSEMBLER_TEST_RUN(Subu, test) { |
| 547 typedef int (*SimpleCode)(); | 547 typedef int (*SimpleCode)(); |
| 548 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 548 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 549 } | 549 } |
| 550 | 550 |
| 551 | 551 |
| 552 ASSEMBLER_TEST_GENERATE(Or, assembler) { | 552 ASSEMBLER_TEST_GENERATE(Or, assembler) { |
| 553 __ LoadImmediate(R1, 34); | 553 __ LoadImmediate(T1, 34); |
| 554 __ LoadImmediate(R2, 8); | 554 __ LoadImmediate(T2, 8); |
| 555 __ or_(V0, R1, R2); | 555 __ or_(V0, T1, T2); |
| 556 __ jr(RA); | 556 __ jr(RA); |
| 557 } | 557 } |
| 558 | 558 |
| 559 | 559 |
| 560 ASSEMBLER_TEST_RUN(Or, test) { | 560 ASSEMBLER_TEST_RUN(Or, test) { |
| 561 typedef int (*SimpleCode)(); | 561 typedef int (*SimpleCode)(); |
| 562 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 562 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 563 } | 563 } |
| 564 | 564 |
| 565 | 565 |
| 566 ASSEMBLER_TEST_GENERATE(Nor, assembler) { | 566 ASSEMBLER_TEST_GENERATE(Nor, assembler) { |
| 567 __ LoadImmediate(R1, -47); | 567 __ LoadImmediate(T1, -47); |
| 568 __ LoadImmediate(R2, -60); | 568 __ LoadImmediate(T2, -60); |
| 569 __ nor(V0, R1, R2); | 569 __ nor(V0, T1, T2); |
| 570 __ jr(RA); | 570 __ jr(RA); |
| 571 } | 571 } |
| 572 | 572 |
| 573 | 573 |
| 574 ASSEMBLER_TEST_RUN(Nor, test) { | 574 ASSEMBLER_TEST_RUN(Nor, test) { |
| 575 typedef int (*SimpleCode)(); | 575 typedef int (*SimpleCode)(); |
| 576 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 576 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 577 } | 577 } |
| 578 | 578 |
| 579 | 579 |
| 580 ASSEMBLER_TEST_GENERATE(Xor, assembler) { | 580 ASSEMBLER_TEST_GENERATE(Xor, assembler) { |
| 581 __ LoadImmediate(R1, 51); | 581 __ LoadImmediate(T1, 51); |
| 582 __ LoadImmediate(R2, 25); | 582 __ LoadImmediate(T2, 25); |
| 583 __ xor_(V0, R1, R2); | 583 __ xor_(V0, T1, T2); |
| 584 __ jr(RA); | 584 __ jr(RA); |
| 585 } | 585 } |
| 586 | 586 |
| 587 | 587 |
| 588 ASSEMBLER_TEST_RUN(Xor, test) { | 588 ASSEMBLER_TEST_RUN(Xor, test) { |
| 589 typedef int (*SimpleCode)(); | 589 typedef int (*SimpleCode)(); |
| 590 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 590 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 591 } | 591 } |
| 592 | 592 |
| 593 | 593 |
| 594 ASSEMBLER_TEST_GENERATE(Xori, assembler) { | 594 ASSEMBLER_TEST_GENERATE(Xori, assembler) { |
| 595 __ LoadImmediate(T0, 51); | 595 __ LoadImmediate(T0, 51); |
| 596 __ xori(V0, T0, Immediate(25)); | 596 __ xori(V0, T0, Immediate(25)); |
| 597 __ jr(RA); | 597 __ jr(RA); |
| 598 } | 598 } |
| 599 | 599 |
| 600 | 600 |
| 601 ASSEMBLER_TEST_RUN(Xori, test) { | 601 ASSEMBLER_TEST_RUN(Xori, test) { |
| 602 typedef int (*SimpleCode)(); | 602 typedef int (*SimpleCode)(); |
| 603 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 603 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 604 } | 604 } |
| 605 | 605 |
| 606 | 606 |
| 607 ASSEMBLER_TEST_GENERATE(Slt, assembler) { | 607 ASSEMBLER_TEST_GENERATE(Slt, assembler) { |
| 608 __ LoadImmediate(R1, -1); | 608 __ LoadImmediate(T1, -1); |
| 609 __ LoadImmediate(R2, 0); | 609 __ LoadImmediate(T2, 0); |
| 610 __ slt(V0, R1, R2); | 610 __ slt(V0, T1, T2); |
| 611 __ jr(RA); | 611 __ jr(RA); |
| 612 } | 612 } |
| 613 | 613 |
| 614 | 614 |
| 615 ASSEMBLER_TEST_RUN(Slt, test) { | 615 ASSEMBLER_TEST_RUN(Slt, test) { |
| 616 typedef int (*SimpleCode)(); | 616 typedef int (*SimpleCode)(); |
| 617 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 617 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 618 } | 618 } |
| 619 | 619 |
| 620 | 620 |
| 621 ASSEMBLER_TEST_GENERATE(Sltu, assembler) { | 621 ASSEMBLER_TEST_GENERATE(Sltu, assembler) { |
| 622 __ LoadImmediate(R1, -1); | 622 __ LoadImmediate(T1, -1); |
| 623 __ LoadImmediate(R2, 0); | 623 __ LoadImmediate(T2, 0); |
| 624 __ sltu(V0, R1, R2); | 624 __ sltu(V0, T1, T2); |
| 625 __ jr(RA); | 625 __ jr(RA); |
| 626 } | 626 } |
| 627 | 627 |
| 628 | 628 |
| 629 ASSEMBLER_TEST_RUN(Sltu, test) { | 629 ASSEMBLER_TEST_RUN(Sltu, test) { |
| 630 typedef int (*SimpleCode)(); | 630 typedef int (*SimpleCode)(); |
| 631 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 631 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 632 } | 632 } |
| 633 | 633 |
| 634 | 634 |
| 635 ASSEMBLER_TEST_GENERATE(Movz, assembler) { | 635 ASSEMBLER_TEST_GENERATE(Movz, assembler) { |
| 636 __ LoadImmediate(R1, 42); | 636 __ LoadImmediate(T1, 42); |
| 637 __ LoadImmediate(R2, 23); | 637 __ LoadImmediate(T2, 23); |
| 638 __ slt(R3, R1, R2); | 638 __ slt(T3, T1, T2); |
| 639 __ movz(V0, R1, R3); | 639 __ movz(V0, T1, T3); |
| 640 __ jr(RA); | 640 __ jr(RA); |
| 641 } | 641 } |
| 642 | 642 |
| 643 | 643 |
| 644 ASSEMBLER_TEST_RUN(Movz, test) { | 644 ASSEMBLER_TEST_RUN(Movz, test) { |
| 645 typedef int (*SimpleCode)(); | 645 typedef int (*SimpleCode)(); |
| 646 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 646 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 647 } | 647 } |
| 648 | 648 |
| 649 | 649 |
| 650 ASSEMBLER_TEST_GENERATE(Movn, assembler) { | 650 ASSEMBLER_TEST_GENERATE(Movn, assembler) { |
| 651 __ LoadImmediate(R1, 42); | 651 __ LoadImmediate(T1, 42); |
| 652 __ LoadImmediate(R2, 23); | 652 __ LoadImmediate(T2, 23); |
| 653 __ slt(R3, R2, R1); | 653 __ slt(T3, T2, T1); |
| 654 __ movn(V0, R1, R3); | 654 __ movn(V0, T1, T3); |
| 655 __ jr(RA); | 655 __ jr(RA); |
| 656 } | 656 } |
| 657 | 657 |
| 658 | 658 |
| 659 ASSEMBLER_TEST_RUN(Movn, test) { | 659 ASSEMBLER_TEST_RUN(Movn, test) { |
| 660 typedef int (*SimpleCode)(); | 660 typedef int (*SimpleCode)(); |
| 661 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 661 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 662 } | 662 } |
| 663 | 663 |
| 664 | 664 |
| 665 ASSEMBLER_TEST_GENERATE(Jr_delay, assembler) { | 665 ASSEMBLER_TEST_GENERATE(Jr_delay, assembler) { |
| 666 __ jr(RA); | 666 __ jr(RA); |
| 667 __ delay_slot()->ori(V0, ZR, Immediate(42)); | 667 __ delay_slot()->ori(V0, ZR, Immediate(42)); |
| 668 } | 668 } |
| 669 | 669 |
| 670 | 670 |
| 671 ASSEMBLER_TEST_RUN(Jr_delay, test) { | 671 ASSEMBLER_TEST_RUN(Jr_delay, test) { |
| 672 typedef int (*SimpleCode)(); | 672 typedef int (*SimpleCode)(); |
| 673 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 673 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 674 } | 674 } |
| 675 | 675 |
| 676 | 676 |
| 677 ASSEMBLER_TEST_GENERATE(Beq_backward, assembler) { | 677 ASSEMBLER_TEST_GENERATE(Beq_backward, assembler) { |
| 678 Label l; | 678 Label l; |
| 679 | 679 |
| 680 __ LoadImmediate(R1, 0); | 680 __ LoadImmediate(T1, 0); |
| 681 __ LoadImmediate(R2, 1); | 681 __ LoadImmediate(T2, 1); |
| 682 __ Bind(&l); | 682 __ Bind(&l); |
| 683 __ addiu(R1, R1, Immediate(1)); | 683 __ addiu(T1, T1, Immediate(1)); |
| 684 __ beq(R1, R2, &l); | 684 __ beq(T1, T2, &l); |
| 685 __ ori(V0, R1, Immediate(0)); | 685 __ ori(V0, T1, Immediate(0)); |
| 686 __ jr(RA); | 686 __ jr(RA); |
| 687 } | 687 } |
| 688 | 688 |
| 689 | 689 |
| 690 ASSEMBLER_TEST_RUN(Beq_backward, test) { | 690 ASSEMBLER_TEST_RUN(Beq_backward, test) { |
| 691 typedef int (*SimpleCode)(); | 691 typedef int (*SimpleCode)(); |
| 692 EXPECT_EQ(2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 692 EXPECT_EQ(2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 693 } | 693 } |
| 694 | 694 |
| 695 | 695 |
| 696 ASSEMBLER_TEST_GENERATE(Beq_backward_delay, assembler) { | 696 ASSEMBLER_TEST_GENERATE(Beq_backward_delay, assembler) { |
| 697 Label l; | 697 Label l; |
| 698 | 698 |
| 699 __ LoadImmediate(R1, 0); | 699 __ LoadImmediate(T1, 0); |
| 700 __ LoadImmediate(R2, 1); | 700 __ LoadImmediate(T2, 1); |
| 701 __ Bind(&l); | 701 __ Bind(&l); |
| 702 __ addiu(R1, R1, Immediate(1)); | 702 __ addiu(T1, T1, Immediate(1)); |
| 703 __ beq(R1, R2, &l); | 703 __ beq(T1, T2, &l); |
| 704 __ delay_slot()->addiu(R1, R1, Immediate(1)); | 704 __ delay_slot()->addiu(T1, T1, Immediate(1)); |
| 705 __ ori(V0, R1, Immediate(0)); | 705 __ ori(V0, T1, Immediate(0)); |
| 706 __ jr(RA); | 706 __ jr(RA); |
| 707 } | 707 } |
| 708 | 708 |
| 709 | 709 |
| 710 ASSEMBLER_TEST_RUN(Beq_backward_delay, test) { | 710 ASSEMBLER_TEST_RUN(Beq_backward_delay, test) { |
| 711 typedef int (*SimpleCode)(); | 711 typedef int (*SimpleCode)(); |
| 712 EXPECT_EQ(4, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 712 EXPECT_EQ(4, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 713 } | 713 } |
| 714 | 714 |
| 715 | 715 |
| 716 ASSEMBLER_TEST_GENERATE(Beq_forward_taken, assembler) { | 716 ASSEMBLER_TEST_GENERATE(Beq_forward_taken, assembler) { |
| 717 Label l; | 717 Label l; |
| 718 | 718 |
| 719 __ LoadImmediate(R5, 1); | 719 __ LoadImmediate(T5, 1); |
| 720 __ LoadImmediate(R6, 1); | 720 __ LoadImmediate(T6, 1); |
| 721 | 721 |
| 722 __ LoadImmediate(V0, 42); | 722 __ LoadImmediate(V0, 42); |
| 723 __ beq(R5, R6, &l); | 723 __ beq(T5, T6, &l); |
| 724 __ LoadImmediate(V0, 0); | 724 __ LoadImmediate(V0, 0); |
| 725 __ Bind(&l); | 725 __ Bind(&l); |
| 726 __ jr(RA); | 726 __ jr(RA); |
| 727 } | 727 } |
| 728 | 728 |
| 729 | 729 |
| 730 ASSEMBLER_TEST_RUN(Beq_forward_taken, test) { | 730 ASSEMBLER_TEST_RUN(Beq_forward_taken, test) { |
| 731 typedef int (*SimpleCode)(); | 731 typedef int (*SimpleCode)(); |
| 732 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 732 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 733 } | 733 } |
| 734 | 734 |
| 735 | 735 |
| 736 ASSEMBLER_TEST_GENERATE(Beq_forward_not_taken, assembler) { | 736 ASSEMBLER_TEST_GENERATE(Beq_forward_not_taken, assembler) { |
| 737 Label l; | 737 Label l; |
| 738 | 738 |
| 739 __ LoadImmediate(R5, 0); | 739 __ LoadImmediate(T5, 0); |
| 740 __ LoadImmediate(R6, 1); | 740 __ LoadImmediate(T6, 1); |
| 741 | 741 |
| 742 __ LoadImmediate(V0, 42); | 742 __ LoadImmediate(V0, 42); |
| 743 __ beq(R5, R6, &l); | 743 __ beq(T5, T6, &l); |
| 744 __ LoadImmediate(V0, 0); | 744 __ LoadImmediate(V0, 0); |
| 745 __ Bind(&l); | 745 __ Bind(&l); |
| 746 __ jr(RA); | 746 __ jr(RA); |
| 747 } | 747 } |
| 748 | 748 |
| 749 | 749 |
| 750 ASSEMBLER_TEST_RUN(Beq_forward_not_taken, test) { | 750 ASSEMBLER_TEST_RUN(Beq_forward_not_taken, test) { |
| 751 typedef int (*SimpleCode)(); | 751 typedef int (*SimpleCode)(); |
| 752 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 752 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 753 } | 753 } |
| 754 | 754 |
| 755 | 755 |
| 756 ASSEMBLER_TEST_GENERATE(Beq_forward_taken2, assembler) { | 756 ASSEMBLER_TEST_GENERATE(Beq_forward_taken2, assembler) { |
| 757 Label l; | 757 Label l; |
| 758 | 758 |
| 759 __ LoadImmediate(R5, 1); | 759 __ LoadImmediate(T5, 1); |
| 760 __ LoadImmediate(R6, 1); | 760 __ LoadImmediate(T6, 1); |
| 761 | 761 |
| 762 __ LoadImmediate(V0, 42); | 762 __ LoadImmediate(V0, 42); |
| 763 __ beq(R5, R6, &l); | 763 __ beq(T5, T6, &l); |
| 764 __ nop(); | 764 __ nop(); |
| 765 __ nop(); | 765 __ nop(); |
| 766 __ LoadImmediate(V0, 0); | 766 __ LoadImmediate(V0, 0); |
| 767 __ Bind(&l); | 767 __ Bind(&l); |
| 768 __ jr(RA); | 768 __ jr(RA); |
| 769 } | 769 } |
| 770 | 770 |
| 771 | 771 |
| 772 ASSEMBLER_TEST_RUN(Beq_forward_taken2, test) { | 772 ASSEMBLER_TEST_RUN(Beq_forward_taken2, test) { |
| 773 typedef int (*SimpleCode)(); | 773 typedef int (*SimpleCode)(); |
| 774 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 774 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 775 } | 775 } |
| 776 | 776 |
| 777 | 777 |
| 778 ASSEMBLER_TEST_GENERATE(Beq_forward_taken_delay, assembler) { | 778 ASSEMBLER_TEST_GENERATE(Beq_forward_taken_delay, assembler) { |
| 779 Label l; | 779 Label l; |
| 780 | 780 |
| 781 __ LoadImmediate(R5, 1); | 781 __ LoadImmediate(T5, 1); |
| 782 __ LoadImmediate(R6, 1); | 782 __ LoadImmediate(T6, 1); |
| 783 | 783 |
| 784 __ LoadImmediate(V0, 42); | 784 __ LoadImmediate(V0, 42); |
| 785 __ beq(R5, R6, &l); | 785 __ beq(T5, T6, &l); |
| 786 __ delay_slot()->ori(V0, V0, Immediate(1)); | 786 __ delay_slot()->ori(V0, V0, Immediate(1)); |
| 787 __ LoadImmediate(V0, 0); | 787 __ LoadImmediate(V0, 0); |
| 788 __ Bind(&l); | 788 __ Bind(&l); |
| 789 __ jr(RA); | 789 __ jr(RA); |
| 790 } | 790 } |
| 791 | 791 |
| 792 | 792 |
| 793 ASSEMBLER_TEST_RUN(Beq_forward_taken_delay, test) { | 793 ASSEMBLER_TEST_RUN(Beq_forward_taken_delay, test) { |
| 794 typedef int (*SimpleCode)(); | 794 typedef int (*SimpleCode)(); |
| 795 EXPECT_EQ(43, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 795 EXPECT_EQ(43, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 796 } | 796 } |
| 797 | 797 |
| 798 | 798 |
| 799 ASSEMBLER_TEST_GENERATE(Beq_forward_not_taken_delay, assembler) { | 799 ASSEMBLER_TEST_GENERATE(Beq_forward_not_taken_delay, assembler) { |
| 800 Label l; | 800 Label l; |
| 801 | 801 |
| 802 __ LoadImmediate(R5, 0); | 802 __ LoadImmediate(T5, 0); |
| 803 __ LoadImmediate(R6, 1); | 803 __ LoadImmediate(T6, 1); |
| 804 | 804 |
| 805 __ LoadImmediate(V0, 42); | 805 __ LoadImmediate(V0, 42); |
| 806 __ beq(R5, R6, &l); | 806 __ beq(T5, T6, &l); |
| 807 __ delay_slot()->ori(V0, V0, Immediate(1)); | 807 __ delay_slot()->ori(V0, V0, Immediate(1)); |
| 808 __ addiu(V0, V0, Immediate(1)); | 808 __ addiu(V0, V0, Immediate(1)); |
| 809 __ Bind(&l); | 809 __ Bind(&l); |
| 810 __ jr(RA); | 810 __ jr(RA); |
| 811 } | 811 } |
| 812 | 812 |
| 813 | 813 |
| 814 ASSEMBLER_TEST_RUN(Beq_forward_not_taken_delay, test) { | 814 ASSEMBLER_TEST_RUN(Beq_forward_not_taken_delay, test) { |
| 815 typedef int (*SimpleCode)(); | 815 typedef int (*SimpleCode)(); |
| 816 EXPECT_EQ(44, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 816 EXPECT_EQ(44, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 817 } | 817 } |
| 818 | 818 |
| 819 | 819 |
| 820 ASSEMBLER_TEST_GENERATE(Beql_backward_delay, assembler) { | 820 ASSEMBLER_TEST_GENERATE(Beql_backward_delay, assembler) { |
| 821 Label l; | 821 Label l; |
| 822 | 822 |
| 823 __ LoadImmediate(R5, 0); | 823 __ LoadImmediate(T5, 0); |
| 824 __ LoadImmediate(R6, 1); | 824 __ LoadImmediate(T6, 1); |
| 825 __ Bind(&l); | 825 __ Bind(&l); |
| 826 __ addiu(R5, R5, Immediate(1)); | 826 __ addiu(T5, T5, Immediate(1)); |
| 827 __ beql(R5, R6, &l); | 827 __ beql(T5, T6, &l); |
| 828 __ delay_slot()->addiu(R5, R5, Immediate(1)); | 828 __ delay_slot()->addiu(T5, T5, Immediate(1)); |
| 829 __ ori(V0, R5, Immediate(0)); | 829 __ ori(V0, T5, Immediate(0)); |
| 830 __ jr(RA); | 830 __ jr(RA); |
| 831 } | 831 } |
| 832 | 832 |
| 833 | 833 |
| 834 ASSEMBLER_TEST_RUN(Beql_backward_delay, test) { | 834 ASSEMBLER_TEST_RUN(Beql_backward_delay, test) { |
| 835 typedef int (*SimpleCode)(); | 835 typedef int (*SimpleCode)(); |
| 836 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 836 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 837 } | 837 } |
| 838 | 838 |
| 839 | 839 |
| 840 ASSEMBLER_TEST_GENERATE(Bgez, assembler) { | 840 ASSEMBLER_TEST_GENERATE(Bgez, assembler) { |
| 841 Label l; | 841 Label l; |
| 842 | 842 |
| 843 __ LoadImmediate(R5, 3); | 843 __ LoadImmediate(T5, 3); |
| 844 __ Bind(&l); | 844 __ Bind(&l); |
| 845 __ bgez(R5, &l); | 845 __ bgez(T5, &l); |
| 846 __ delay_slot()->addiu(R5, R5, Immediate(-1)); | 846 __ delay_slot()->addiu(T5, T5, Immediate(-1)); |
| 847 __ ori(V0, R5, Immediate(0)); | 847 __ ori(V0, T5, Immediate(0)); |
| 848 __ jr(RA); | 848 __ jr(RA); |
| 849 } | 849 } |
| 850 | 850 |
| 851 | 851 |
| 852 ASSEMBLER_TEST_RUN(Bgez, test) { | 852 ASSEMBLER_TEST_RUN(Bgez, test) { |
| 853 typedef int (*SimpleCode)(); | 853 typedef int (*SimpleCode)(); |
| 854 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 854 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 855 } | 855 } |
| 856 | 856 |
| 857 | 857 |
| 858 ASSEMBLER_TEST_GENERATE(Bgezl, assembler) { | 858 ASSEMBLER_TEST_GENERATE(Bgezl, assembler) { |
| 859 Label l; | 859 Label l; |
| 860 | 860 |
| 861 __ LoadImmediate(R5, 3); | 861 __ LoadImmediate(T5, 3); |
| 862 __ Bind(&l); | 862 __ Bind(&l); |
| 863 __ bgezl(R5, &l); | 863 __ bgezl(T5, &l); |
| 864 __ delay_slot()->addiu(R5, R5, Immediate(-1)); | 864 __ delay_slot()->addiu(T5, T5, Immediate(-1)); |
| 865 __ ori(V0, R5, Immediate(0)); | 865 __ ori(V0, T5, Immediate(0)); |
| 866 __ jr(RA); | 866 __ jr(RA); |
| 867 } | 867 } |
| 868 | 868 |
| 869 | 869 |
| 870 ASSEMBLER_TEST_RUN(Bgezl, test) { | 870 ASSEMBLER_TEST_RUN(Bgezl, test) { |
| 871 typedef int (*SimpleCode)(); | 871 typedef int (*SimpleCode)(); |
| 872 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 872 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 873 } | 873 } |
| 874 | 874 |
| 875 | 875 |
| 876 ASSEMBLER_TEST_GENERATE(Blez, assembler) { | 876 ASSEMBLER_TEST_GENERATE(Blez, assembler) { |
| 877 Label l; | 877 Label l; |
| 878 | 878 |
| 879 __ LoadImmediate(R5, -3); | 879 __ LoadImmediate(T5, -3); |
| 880 __ Bind(&l); | 880 __ Bind(&l); |
| 881 __ blez(R5, &l); | 881 __ blez(T5, &l); |
| 882 __ delay_slot()->addiu(R5, R5, Immediate(1)); | 882 __ delay_slot()->addiu(T5, T5, Immediate(1)); |
| 883 __ ori(V0, R5, Immediate(0)); | 883 __ ori(V0, T5, Immediate(0)); |
| 884 __ jr(RA); | 884 __ jr(RA); |
| 885 } | 885 } |
| 886 | 886 |
| 887 | 887 |
| 888 ASSEMBLER_TEST_RUN(Blez, test) { | 888 ASSEMBLER_TEST_RUN(Blez, test) { |
| 889 typedef int (*SimpleCode)(); | 889 typedef int (*SimpleCode)(); |
| 890 EXPECT_EQ(2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 890 EXPECT_EQ(2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 891 } | 891 } |
| 892 | 892 |
| 893 | 893 |
| 894 ASSEMBLER_TEST_GENERATE(Blezl, assembler) { | 894 ASSEMBLER_TEST_GENERATE(Blezl, assembler) { |
| 895 Label l; | 895 Label l; |
| 896 | 896 |
| 897 __ LoadImmediate(R5, -3); | 897 __ LoadImmediate(T5, -3); |
| 898 __ Bind(&l); | 898 __ Bind(&l); |
| 899 __ blezl(R5, &l); | 899 __ blezl(T5, &l); |
| 900 __ delay_slot()->addiu(R5, R5, Immediate(1)); | 900 __ delay_slot()->addiu(T5, T5, Immediate(1)); |
| 901 __ ori(V0, R5, Immediate(0)); | 901 __ ori(V0, T5, Immediate(0)); |
| 902 __ jr(RA); | 902 __ jr(RA); |
| 903 } | 903 } |
| 904 | 904 |
| 905 | 905 |
| 906 ASSEMBLER_TEST_RUN(Blezl, test) { | 906 ASSEMBLER_TEST_RUN(Blezl, test) { |
| 907 typedef int (*SimpleCode)(); | 907 typedef int (*SimpleCode)(); |
| 908 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 908 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 909 } | 909 } |
| 910 | 910 |
| 911 | 911 |
| 912 ASSEMBLER_TEST_GENERATE(Bgtz, assembler) { | 912 ASSEMBLER_TEST_GENERATE(Bgtz, assembler) { |
| 913 Label l; | 913 Label l; |
| 914 | 914 |
| 915 __ LoadImmediate(R5, 3); | 915 __ LoadImmediate(T5, 3); |
| 916 __ Bind(&l); | 916 __ Bind(&l); |
| 917 __ bgtz(R5, &l); | 917 __ bgtz(T5, &l); |
| 918 __ delay_slot()->addiu(R5, R5, Immediate(-1)); | 918 __ delay_slot()->addiu(T5, T5, Immediate(-1)); |
| 919 __ ori(V0, R5, Immediate(0)); | 919 __ ori(V0, T5, Immediate(0)); |
| 920 __ jr(RA); | 920 __ jr(RA); |
| 921 } | 921 } |
| 922 | 922 |
| 923 | 923 |
| 924 ASSEMBLER_TEST_RUN(Bgtz, test) { | 924 ASSEMBLER_TEST_RUN(Bgtz, test) { |
| 925 typedef int (*SimpleCode)(); | 925 typedef int (*SimpleCode)(); |
| 926 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 926 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 927 } | 927 } |
| 928 | 928 |
| 929 | 929 |
| 930 ASSEMBLER_TEST_GENERATE(Bgtzl, assembler) { | 930 ASSEMBLER_TEST_GENERATE(Bgtzl, assembler) { |
| 931 Label l; | 931 Label l; |
| 932 | 932 |
| 933 __ LoadImmediate(R5, 3); | 933 __ LoadImmediate(T5, 3); |
| 934 __ Bind(&l); | 934 __ Bind(&l); |
| 935 __ bgtzl(R5, &l); | 935 __ bgtzl(T5, &l); |
| 936 __ delay_slot()->addiu(R5, R5, Immediate(-1)); | 936 __ delay_slot()->addiu(T5, T5, Immediate(-1)); |
| 937 __ ori(V0, R5, Immediate(0)); | 937 __ ori(V0, T5, Immediate(0)); |
| 938 __ jr(RA); | 938 __ jr(RA); |
| 939 } | 939 } |
| 940 | 940 |
| 941 | 941 |
| 942 ASSEMBLER_TEST_RUN(Bgtzl, test) { | 942 ASSEMBLER_TEST_RUN(Bgtzl, test) { |
| 943 typedef int (*SimpleCode)(); | 943 typedef int (*SimpleCode)(); |
| 944 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 944 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 945 } | 945 } |
| 946 | 946 |
| 947 | 947 |
| 948 ASSEMBLER_TEST_GENERATE(Bltz, assembler) { | 948 ASSEMBLER_TEST_GENERATE(Bltz, assembler) { |
| 949 Label l; | 949 Label l; |
| 950 | 950 |
| 951 __ LoadImmediate(R5, -3); | 951 __ LoadImmediate(T5, -3); |
| 952 __ Bind(&l); | 952 __ Bind(&l); |
| 953 __ bltz(R5, &l); | 953 __ bltz(T5, &l); |
| 954 __ delay_slot()->addiu(R5, R5, Immediate(1)); | 954 __ delay_slot()->addiu(T5, T5, Immediate(1)); |
| 955 __ ori(V0, R5, Immediate(0)); | 955 __ ori(V0, T5, Immediate(0)); |
| 956 __ jr(RA); | 956 __ jr(RA); |
| 957 } | 957 } |
| 958 | 958 |
| 959 | 959 |
| 960 ASSEMBLER_TEST_RUN(Bltz, test) { | 960 ASSEMBLER_TEST_RUN(Bltz, test) { |
| 961 typedef int (*SimpleCode)(); | 961 typedef int (*SimpleCode)(); |
| 962 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 962 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 963 } | 963 } |
| 964 | 964 |
| 965 | 965 |
| 966 ASSEMBLER_TEST_GENERATE(Bltzl, assembler) { | 966 ASSEMBLER_TEST_GENERATE(Bltzl, assembler) { |
| 967 Label l; | 967 Label l; |
| 968 | 968 |
| 969 __ LoadImmediate(R5, -3); | 969 __ LoadImmediate(T5, -3); |
| 970 __ Bind(&l); | 970 __ Bind(&l); |
| 971 __ bltzl(R5, &l); | 971 __ bltzl(T5, &l); |
| 972 __ delay_slot()->addiu(R5, R5, Immediate(1)); | 972 __ delay_slot()->addiu(T5, T5, Immediate(1)); |
| 973 __ ori(V0, R5, Immediate(0)); | 973 __ ori(V0, T5, Immediate(0)); |
| 974 __ jr(RA); | 974 __ jr(RA); |
| 975 } | 975 } |
| 976 | 976 |
| 977 | 977 |
| 978 ASSEMBLER_TEST_RUN(Bltzl, test) { | 978 ASSEMBLER_TEST_RUN(Bltzl, test) { |
| 979 typedef int (*SimpleCode)(); | 979 typedef int (*SimpleCode)(); |
| 980 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 980 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 981 } | 981 } |
| 982 | 982 |
| 983 | 983 |
| 984 ASSEMBLER_TEST_GENERATE(Bne, assembler) { | 984 ASSEMBLER_TEST_GENERATE(Bne, assembler) { |
| 985 Label l; | 985 Label l; |
| 986 | 986 |
| 987 __ LoadImmediate(R5, 3); | 987 __ LoadImmediate(T5, 3); |
| 988 __ Bind(&l); | 988 __ Bind(&l); |
| 989 __ bne(R5, R0, &l); | 989 __ bne(T5, R0, &l); |
| 990 __ delay_slot()->addiu(R5, R5, Immediate(-1)); | 990 __ delay_slot()->addiu(T5, T5, Immediate(-1)); |
| 991 __ ori(V0, R5, Immediate(0)); | 991 __ ori(V0, T5, Immediate(0)); |
| 992 __ jr(RA); | 992 __ jr(RA); |
| 993 } | 993 } |
| 994 | 994 |
| 995 | 995 |
| 996 ASSEMBLER_TEST_RUN(Bne, test) { | 996 ASSEMBLER_TEST_RUN(Bne, test) { |
| 997 typedef int (*SimpleCode)(); | 997 typedef int (*SimpleCode)(); |
| 998 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 998 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 999 } | 999 } |
| 1000 | 1000 |
| 1001 | 1001 |
| 1002 ASSEMBLER_TEST_GENERATE(Bnel, assembler) { | 1002 ASSEMBLER_TEST_GENERATE(Bnel, assembler) { |
| 1003 Label l; | 1003 Label l; |
| 1004 | 1004 |
| 1005 __ LoadImmediate(R5, 3); | 1005 __ LoadImmediate(T5, 3); |
| 1006 __ Bind(&l); | 1006 __ Bind(&l); |
| 1007 __ bnel(R5, R0, &l); | 1007 __ bnel(T5, R0, &l); |
| 1008 __ delay_slot()->addiu(R5, R5, Immediate(-1)); | 1008 __ delay_slot()->addiu(T5, T5, Immediate(-1)); |
| 1009 __ ori(V0, R5, Immediate(0)); | 1009 __ ori(V0, T5, Immediate(0)); |
| 1010 __ jr(RA); | 1010 __ jr(RA); |
| 1011 } | 1011 } |
| 1012 | 1012 |
| 1013 | 1013 |
| 1014 ASSEMBLER_TEST_RUN(Bnel, test) { | 1014 ASSEMBLER_TEST_RUN(Bnel, test) { |
| 1015 typedef int (*SimpleCode)(); | 1015 typedef int (*SimpleCode)(); |
| 1016 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 1016 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 1017 } | 1017 } |
| 1018 | 1018 |
| 1019 | 1019 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1051 } | 1051 } |
| 1052 | 1052 |
| 1053 | 1053 |
| 1054 ASSEMBLER_TEST_RUN(Label_link2, test) { | 1054 ASSEMBLER_TEST_RUN(Label_link2, test) { |
| 1055 typedef int (*SimpleCode)(); | 1055 typedef int (*SimpleCode)(); |
| 1056 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 1056 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 1057 } | 1057 } |
| 1058 | 1058 |
| 1059 | 1059 |
| 1060 ASSEMBLER_TEST_GENERATE(Jalr_delay, assembler) { | 1060 ASSEMBLER_TEST_GENERATE(Jalr_delay, assembler) { |
| 1061 __ mov(R2, RA); | 1061 __ mov(T2, RA); |
| 1062 __ jalr(R2, RA); | 1062 __ jalr(T2, RA); |
| 1063 __ delay_slot()->ori(V0, ZR, Immediate(42)); | 1063 __ delay_slot()->ori(V0, ZR, Immediate(42)); |
| 1064 } | 1064 } |
| 1065 | 1065 |
| 1066 | 1066 |
| 1067 ASSEMBLER_TEST_RUN(Jalr_delay, test) { | 1067 ASSEMBLER_TEST_RUN(Jalr_delay, test) { |
| 1068 typedef int (*SimpleCode)(); | 1068 typedef int (*SimpleCode)(); |
| 1069 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); | 1069 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); |
| 1070 } | 1070 } |
| 1071 | 1071 |
| 1072 | 1072 |
| (...skipping 608 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1681 A1); | 1681 A1); |
| 1682 __ lw(RA, Address(SP, 0 * kWordSize)); | 1682 __ lw(RA, Address(SP, 0 * kWordSize)); |
| 1683 __ lw(CTX, Address(SP, 1 * kWordSize)); | 1683 __ lw(CTX, Address(SP, 1 * kWordSize)); |
| 1684 __ addiu(SP, SP, Immediate(2 * kWordSize)); | 1684 __ addiu(SP, SP, Immediate(2 * kWordSize)); |
| 1685 __ Ret(); | 1685 __ Ret(); |
| 1686 } | 1686 } |
| 1687 | 1687 |
| 1688 } // namespace dart | 1688 } // namespace dart |
| 1689 | 1689 |
| 1690 #endif // defined TARGET_ARCH_MIPS | 1690 #endif // defined TARGET_ARCH_MIPS |
| OLD | NEW |