1 1.1 christos # check that basic insns work. 2 1.1 christos # mach: ft32 3 1.1 christos 4 1.1 christos .include "testutils.inc" 5 1.1 christos 6 1.1 christos start 7 1.1 christos 8 1.1 christos ldk $r0,__PMSIZE 9 1.1 christos EXPECT $r0,0x00040000 10 1.1 christos ldk $r0,__RAMSIZE 11 1.1 christos EXPECT $r0,0x00010000 12 1.1 christos 13 1.1 christos ldk $r4,10 14 1.1 christos add $r4,$r4,23 15 1.1 christos EXPECT $r4,33 16 1.1 christos 17 1.1 christos # lda, sta 18 1.1 christos .data 19 1.1 christos tmp: .long 0 20 1.1 christos .text 21 1.1 christos 22 1.1 christos xor.l $r0,$r0,$r0 23 1.1 christos EXPECT $r0,0x00000000 24 1.1 christos xor.l $r0,$r0,$r0 25 1.1 christos add.l $r0,$r0,1 26 1.1 christos EXPECT $r0,0x00000001 27 1.1 christos 28 1.1 christos ldk.l $r0,0x4567 29 1.1 christos EXPECT $r0,0x00004567 30 1.1 christos 31 1.1 christos lpm.l $r0,k_12345678 32 1.1 christos EXPECT $r0,0x12345678 33 1.1 christos 34 1.1 christos sta.l tmp,$r0 35 1.1 christos lda.l $r1,tmp 36 1.1 christos EXPECT $r1,0x12345678 37 1.1 christos 38 1.1 christos lda.b $r1,tmp 39 1.1 christos EXPECT $r1,0x00000078 40 1.1 christos 41 1.1 christos lda.b $r1,tmp+1 42 1.1 christos EXPECT $r1,0x00000056 43 1.1 christos 44 1.1 christos lda.b $r1,tmp+2 45 1.1 christos EXPECT $r1,0x00000034 46 1.1 christos 47 1.1 christos lda.b $r1,tmp+3 48 1.1 christos EXPECT $r1,0x00000012 49 1.1 christos 50 1.1 christos sta.b tmp+1,$r0 51 1.1 christos lda.l $r1,tmp+0 52 1.1 christos EXPECT $r1,0x12347878 53 1.1 christos 54 1.1 christos # immediate 55 1.1 christos ldk.l $r1,12 56 1.1 christos add.l $r1,$r1,4 57 1.1 christos EXPECT $r1,0x00000010 58 1.1 christos add.l $r1,$r1,0x1ff 59 1.1 christos EXPECT $r1,0x0000020f 60 1.1 christos add.l $r1,$r1,-0x200 61 1.1 christos EXPECT $r1,0x0000000f 62 1.1 christos 63 1.1 christos # addk 64 1.1 christos xor.l $r1,$r0,$r0 65 1.1 christos add.l $r2,$r1,127 66 1.1 christos EXPECT $r2,0x0000007f 67 1.1 christos 68 1.1 christos add.l $r2,$r2,127 69 1.1 christos EXPECT $r2,0x000000fe 70 1.1 christos 71 1.1 christos add.l $r2,$r2,-127 72 1.1 christos EXPECT $r2,0x0000007f 73 1.1 christos 74 1.1 christos add.l $r2,$r2,-128 75 1.1 christos EXPECT $r2,0xffffffff 76 1.1 christos 77 1.1 christos add.l $r2,$r2,1 78 1.1 christos EXPECT $r2,0x00000000 79 1.1 christos 80 1.1 christos # mul 81 1.1 christos ldk.l $r1,100 82 1.1 christos ldk.l $r2,77 83 1.1 christos mul.l $r3,$r1,$r2 84 1.1 christos EXPECT $r3,0x00001e14 85 1.1 christos 86 1.1 christos # 0x12345678 ** 2 = 0x14b66dc1df4d840L 87 1.1 christos mul.l $r3,$r0,$r0 88 1.1 christos EXPECT $r3,0x1df4d840 89 1.1 christos muluh.l $r3,$r0,$r0 90 1.1 christos EXPECT $r3,0x014b66dc 91 1.1 christos 92 1.1 christos # push and pop 93 1.1 christos push.l $r0 94 1.1 christos EXPECT $sp,0x0000fffc 95 1.1 christos ldi.l $r3,$sp,0 96 1.1 christos EXPECT $r3,0x12345678 97 1.1 christos 98 1.1 christos pop.l $r4 99 1.1 christos EXPECT $sp,0x00000000 100 1.1 christos EXPECT $r4,0x12345678 101 1.1 christos 102 1.1 christos ldk.l $r1,0x1111 103 1.1 christos push.l $r1 104 1.1 christos ldk.l $r1,0x2222 105 1.1 christos push.l $r1 106 1.1 christos ldk.l $r1,0x3333 107 1.1 christos push.l $r1 108 1.1 christos ldk.l $r1,0x4444 109 1.1 christos push.l $r1 110 1.1 christos EXPECT $sp,0x0000fff0 111 1.1 christos pop.l $r1 112 1.1 christos EXPECT $r1,0x00004444 113 1.1 christos pop.l $r1 114 1.1 christos EXPECT $r1,0x00003333 115 1.1 christos pop.l $r1 116 1.1 christos EXPECT $r1,0x00002222 117 1.1 christos pop.l $r1 118 1.1 christos EXPECT $r1,0x00001111 119 1.1 christos 120 1.1 christos # push and pop with $sp changes 121 1.1 christos ldk.l $r1,0xa111 122 1.1 christos push.l $r1 123 1.1 christos sub.l $sp,$sp,4 124 1.1 christos ldk.l $r1,0xa222 125 1.1 christos push.l $r1 126 1.1 christos add.l $sp,$sp,-36 127 1.1 christos add.l $sp,$sp,36 128 1.1 christos pop.l $r1 129 1.1 christos EXPECT $r1,0x0000a222 130 1.1 christos add.l $sp,$sp,4 131 1.1 christos pop.l $r1 132 1.1 christos EXPECT $r1,0x0000a111 133 1.1 christos 134 1.1 christos # sti 135 1.1 christos ldk.l $r2,80 136 1.1 christos EXPECT $r2,0x00000050 137 1.1 christos sti.l $r2,0,$r0 138 1.1 christos lda.l $r1,80 139 1.1 christos EXPECT $r1,0x12345678 140 1.1 christos 141 1.1 christos ldk.l $r3,0xF0 142 1.1 christos sti.b $r2,0,$r3 143 1.1 christos lda.l $r1,80 144 1.1 christos EXPECT $r1,0x123456f0 145 1.1 christos 146 1.1 christos add.l $r2,$r2,1 147 1.1 christos sti.l $r2,0,$r0 148 1.1 christos sti.b $r2,0,$r3 149 1.1 christos lda.l $r1,80 150 1.1 christos EXPECT $r1,0x1234f078 151 1.1 christos 152 1.1 christos add.l $r2,$r2,1 153 1.1 christos sti.l $r2,0,$r0 154 1.1 christos sti.b $r2,0,$r3 155 1.1 christos lda.l $r1,80 156 1.1 christos EXPECT $r1,0x12f05678 157 1.1 christos 158 1.1 christos add.l $r2,$r2,1 159 1.1 christos sti.l $r2,0,$r0 160 1.1 christos sti.b $r2,0,$r3 161 1.1 christos lda.l $r1,80 162 1.1 christos EXPECT $r1,0xf0345678 163 1.1 christos 164 1.1 christos ldk.l $r2,80 165 1.1 christos sti.l $r2,0,$r0 166 1.1 christos ldk.s $r3,0xbeef 167 1.1 christos sti.s $r2,0,$r3 168 1.1 christos lda.l $r1,80 169 1.1 christos EXPECT $r1,0x1234beef 170 1.1 christos add.l $r2,$r2,2 171 1.1 christos sti.s $r2,0,$r3 172 1.1 christos lda.l $r1,80 173 1.1 christos EXPECT $r1,0xbeefbeef 174 1.1 christos 175 1.1 christos # lpmi 176 1.1 christos 177 1.1 christos ldk.l $r1,k_12345678 178 1.1 christos lpmi.l $r2,$r1,0 179 1.1 christos EXPECT $r2,0x12345678 180 1.1 christos 181 1.1 christos lpmi.b $r2,$r1,0 182 1.1 christos EXPECT $r2,0x00000078 183 1.1 christos 184 1.1 christos add.l $r1,$r1,1 185 1.1 christos lpmi.b $r2,$r1,0 186 1.1 christos EXPECT $r2,0x00000056 187 1.1 christos 188 1.1 christos add.l $r1,$r1,1 189 1.1 christos lpmi.b $r2,$r1,0 190 1.1 christos EXPECT $r2,0x00000034 191 1.1 christos 192 1.1 christos add.l $r1,$r1,1 193 1.1 christos lpmi.b $r2,$r1,0 194 1.1 christos EXPECT $r2,0x00000012 195 1.1 christos 196 1.1 christos lpmi.l $r2,$r1,4 197 1.1 christos EXPECT $r2,0xabcdef01 198 1.1 christos 199 1.1 christos lpmi.l $r2,$r1,-4 200 1.1 christos EXPECT $r2,0x10111213 201 1.1 christos 202 1.1 christos lpmi.b $r2,$r1,-4 203 1.1 christos EXPECT $r2,0x00000010 204 1.1 christos 205 1.1 christos ldk.l $r1,k_12345678 206 1.1 christos lpmi.s $r2,$r1,0 207 1.1 christos EXPECT $r2,0x00005678 208 1.1 christos lpmi.s $r2,$r1,2 209 1.1 christos EXPECT $r2,0x00001234 210 1.1 christos lpmi.b $r2,$r1,6 211 1.1 christos EXPECT $r2,0x000000cd 212 1.1 christos lpmi.b $r2,$r1,7 213 1.1 christos EXPECT $r2,0x000000ab 214 1.1 christos lpmi.b $r2,$r1,-1 215 1.1 christos EXPECT $r2,0x00000010 216 1.1 christos lpmi.s $r2,$r1,-2 217 1.1 christos EXPECT $r2,0x00001011 218 1.1 christos 219 1.1 christos ldk.l $r1,k_12345678-127 220 1.1 christos lpmi.b $r2,$r1,127 221 1.1 christos EXPECT $r2,0x00000078 222 1.1 christos 223 1.1 christos ldk.l $r1,k_12345678+128 224 1.1 christos lpmi.b $r2,$r1,-128 225 1.1 christos EXPECT $r2,0x00000078 226 1.1 christos 227 1.1 christos # shifts 228 1.1 christos 229 1.1 christos lpm.l $r0,k_12345678 230 1.1 christos ldk.l $r2,4 231 1.1 christos ashl.l $r1,$r0,$r2 232 1.1 christos EXPECT $r1,0x23456780 233 1.1 christos lshr.l $r1,$r0,$r2 234 1.1 christos EXPECT $r1,0x01234567 235 1.1 christos ashr.l $r1,$r0,$r2 236 1.1 christos EXPECT $r1,0x01234567 237 1.1 christos 238 1.1 christos lpm.l $r0,k_abcdef01 239 1.1 christos ashl.l $r1,$r0,$r2 240 1.1 christos EXPECT $r1,0xbcdef010 241 1.1 christos lshr.l $r1,$r0,$r2 242 1.1 christos EXPECT $r1,0x0abcdef0 243 1.1 christos ashr.l $r1,$r0,$r2 244 1.1 christos EXPECT $r1,0xfabcdef0 245 1.1 christos 246 1.1 christos # rotate right 247 1.1 christos 248 1.1 christos lpm.l $r0,k_12345678 249 1.1 christos ror.l $r1,$r0,0 250 1.1 christos EXPECT $r1,0x12345678 251 1.1 christos ror.l $r1,$r0,12 252 1.1 christos EXPECT $r1,0x67812345 253 1.1 christos ror.l $r1,$r0,-4 254 1.1 christos EXPECT $r1,0x23456781 255 1.1 christos 256 1.1 christos # jmpx 257 1.1 christos ldk $r28,0xaaaaa 258 1.1 christos jmpx 0,$r28,1,failcase 259 1.1 christos jmpx 1,$r28,0,failcase 260 1.1 christos jmpx 2,$r28,1,failcase 261 1.1 christos jmpx 3,$r28,0,failcase 262 1.1 christos jmpx 4,$r28,1,failcase 263 1.1 christos jmpx 5,$r28,0,failcase 264 1.1 christos jmpx 6,$r28,1,failcase 265 1.1 christos jmpx 7,$r28,0,failcase 266 1.1 christos jmpx 8,$r28,1,failcase 267 1.1 christos jmpx 9,$r28,0,failcase 268 1.1 christos jmpx 10,$r28,1,failcase 269 1.1 christos jmpx 11,$r28,0,failcase 270 1.1 christos jmpx 12,$r28,1,failcase 271 1.1 christos jmpx 13,$r28,0,failcase 272 1.1 christos jmpx 14,$r28,1,failcase 273 1.1 christos jmpx 15,$r28,0,failcase 274 1.1 christos jmpx 16,$r28,1,failcase 275 1.1 christos jmpx 17,$r28,0,failcase 276 1.1 christos jmpx 18,$r28,1,failcase 277 1.1 christos jmpx 19,$r28,0,failcase 278 1.1 christos 279 1.1 christos move $r29,$r28 280 1.1 christos ldk $r28,0 281 1.1 christos jmpx 0,$r29,1,failcase 282 1.1 christos jmpx 1,$r29,0,failcase 283 1.1 christos jmpx 2,$r29,1,failcase 284 1.1 christos jmpx 3,$r29,0,failcase 285 1.1 christos jmpx 4,$r29,1,failcase 286 1.1 christos jmpx 5,$r29,0,failcase 287 1.1 christos jmpx 6,$r29,1,failcase 288 1.1 christos jmpx 7,$r29,0,failcase 289 1.1 christos jmpx 8,$r29,1,failcase 290 1.1 christos jmpx 9,$r29,0,failcase 291 1.1 christos jmpx 10,$r29,1,failcase 292 1.1 christos jmpx 11,$r29,0,failcase 293 1.1 christos jmpx 12,$r29,1,failcase 294 1.1 christos jmpx 13,$r29,0,failcase 295 1.1 christos jmpx 14,$r29,1,failcase 296 1.1 christos jmpx 15,$r29,0,failcase 297 1.1 christos jmpx 16,$r29,1,failcase 298 1.1 christos jmpx 17,$r29,0,failcase 299 1.1 christos jmpx 18,$r29,1,failcase 300 1.1 christos jmpx 19,$r29,0,failcase 301 1.1 christos 302 1.1 christos move $r30,$r29 303 1.1 christos ldk $r29,0 304 1.1 christos jmpx 0,$r30,1,failcase 305 1.1 christos jmpx 1,$r30,0,failcase 306 1.1 christos jmpx 2,$r30,1,failcase 307 1.1 christos jmpx 3,$r30,0,failcase 308 1.1 christos jmpx 4,$r30,1,failcase 309 1.1 christos jmpx 5,$r30,0,failcase 310 1.1 christos jmpx 6,$r30,1,failcase 311 1.1 christos jmpx 7,$r30,0,failcase 312 1.1 christos jmpx 8,$r30,1,failcase 313 1.1 christos jmpx 9,$r30,0,failcase 314 1.1 christos jmpx 10,$r30,1,failcase 315 1.1 christos jmpx 11,$r30,0,failcase 316 1.1 christos jmpx 12,$r30,1,failcase 317 1.1 christos jmpx 13,$r30,0,failcase 318 1.1 christos jmpx 14,$r30,1,failcase 319 1.1 christos jmpx 15,$r30,0,failcase 320 1.1 christos jmpx 16,$r30,1,failcase 321 1.1 christos jmpx 17,$r30,0,failcase 322 1.1 christos jmpx 18,$r30,1,failcase 323 1.1 christos jmpx 19,$r30,0,failcase 324 1.1 christos 325 1.1 christos # callx 326 1.1 christos ldk $r30,0xaaaaa 327 1.1 christos callx 0,$r30,0,skip1 328 1.1 christos jmp failcase 329 1.1 christos callx 1,$r30,1,skip1 330 1.1 christos jmp failcase 331 1.1 christos callx 2,$r30,0,skip1 332 1.1 christos jmp failcase 333 1.1 christos callx 3,$r30,1,skip1 334 1.1 christos jmp failcase 335 1.1 christos 336 1.1 christos callx 0,$r30,1,skip1 337 1.1 christos ldk $r30,0x123 338 1.1 christos EXPECT $r30,0x123 339 1.1 christos 340 1.1 christos #define BIT(N,M) ((((N) & 15) << 5) | (M)) 341 1.1 christos # bextu 342 1.1 christos bextu.l $r1,$r0,(0<<5)|0 343 1.1 christos EXPECT $r1,0x00005678 344 1.1 christos bextu.l $r1,$r0,(4<<5)|0 345 1.1 christos EXPECT $r1,0x00000008 346 1.1 christos bextu.l $r1,$r0,(4<<5)|4 347 1.1 christos EXPECT $r1,0x00000007 348 1.1 christos bextu.l $r1,$r0,(4<<5)|28 349 1.1 christos EXPECT $r1,0x00000001 350 1.1 christos bextu.l $r1,$r0,(8<<5)|16 351 1.1 christos EXPECT $r1,0x00000034 352 1.1 christos ldk.l $r2,-1 353 1.1 christos bextu.l $r1,$r2,(6<<5)|(3) 354 1.1 christos EXPECT $r1,0x0000003f 355 1.1 christos 356 1.1 christos # bexts 357 1.1 christos bexts.l $r1,$r0,(8<<5)|0 358 1.1 christos EXPECT $r1,0x00000078 359 1.1 christos bexts.l $r1,$r0,(0<<5)|16 360 1.1 christos EXPECT $r1,0x00001234 361 1.1 christos bexts.l $r1,$r0,(4<<5)|0 362 1.1 christos EXPECT $r1,0xfffffff8 363 1.1 christos # extract the '5' digit in widths 4-1 364 1.1 christos bexts.l $r1,$r0,(4<<5)|12 365 1.1 christos EXPECT $r1,0x00000005 366 1.1 christos bexts.l $r1,$r0,(3<<5)|12 367 1.1 christos EXPECT $r1,0xfffffffd 368 1.1 christos bexts.l $r1,$r0,(2<<5)|12 369 1.1 christos EXPECT $r1,0x00000001 370 1.1 christos bexts.l $r1,$r0,(1<<5)|12 371 1.1 christos EXPECT $r1,0xffffffff 372 1.1 christos 373 1.1 christos # btst 374 1.1 christos # low four bits should be 0,0,0,1 375 1.1 christos btst.l $r0,(1<<5)|0 376 1.1 christos jmpc nz,failcase 377 1.1 christos btst.l $r0,(1<<5)|1 378 1.1 christos jmpc nz,failcase 379 1.1 christos btst.l $r0,(1<<5)|2 380 1.1 christos jmpc nz,failcase 381 1.1 christos btst.l $r0,(1<<5)|3 382 1.1 christos jmpc z,failcase 383 1.1 christos 384 1.1 christos # the 6 bit field starting at position 24 is positive 385 1.1 christos btst.l $r0,(6<<5)|24 386 1.1 christos jmpc s,failcase 387 1.1 christos # the 5 bit field starting at position 24 is negative 388 1.1 christos btst.l $r0,(5<<5)|24 389 1.1 christos jmpc ns,failcase 390 1.1 christos 391 1.1 christos EXPECT $r0,0x12345678 392 1.1 christos 393 1.1 christos # bins 394 1.1 christos bins.l $r1,$r0,(8 << 5) | (0) 395 1.1 christos EXPECT $r1,0x12345600 396 1.1 christos 397 1.1 christos bins.l $r1,$r0,(0 << 5) | (8) 398 1.1 christos EXPECT $r1,0x12000078 399 1.1 christos 400 1.1 christos ldk.l $r1,(0xff << 10) | (8 << 5) | (8) 401 1.1 christos bins.l $r1,$r0,$r1 402 1.1 christos EXPECT $r1,0x1234ff78 403 1.1 christos 404 1.1 christos call litr1 405 1.1 christos .long (0x8dd1 << 10) | (0 << 5) | (0) 406 1.1 christos bins.l $r1,$r0,$r1 407 1.1 christos EXPECT $r1,0x12348dd1 408 1.1 christos 409 1.1 christos call litr1 410 1.1 christos .long (0x8dd1 << 10) | (0 << 5) | (16) 411 1.1 christos bins.l $r1,$r0,$r1 412 1.1 christos EXPECT $r1,0x8dd15678 413 1.1 christos 414 1.1 christos ldk.l $r1,(0xde << 10) | (8 << 5) | (0) 415 1.1 christos bins.l $r1,$r0,$r1 416 1.1 christos EXPECT $r1,0x123456de 417 1.1 christos 418 1.1 christos # ldl 419 1.1 christos ldk.l $r0,0 420 1.1 christos ldl.l $r3,$r0,0 421 1.1 christos EXPECT $r3,0x00000000 422 1.1 christos ldk.l $r0,-1 423 1.1 christos ldl.l $r3,$r0,-1 424 1.1 christos EXPECT $r3,0xffffffff 425 1.1 christos ldk.l $r0,(0x12345678 >> 10) 426 1.1 christos ldl.l $r3,$r0,(0x12345678 & 0x3ff) 427 1.1 christos EXPECT $r3,0x12345678 428 1.1 christos ldk.l $r0,(0xe2345678 >> 10) 429 1.1 christos ldl.l $r3,$r0,(0xe2345678 & 0x3ff) 430 1.1 christos EXPECT $r3,0xe2345678 431 1.1 christos 432 1.1 christos # flip 433 1.1 christos ldk.l $r0,0x0000001 434 1.1 christos flip.l $r1,$r0,0 435 1.1 christos EXPECT $r1,0x00000001 436 1.1 christos 437 1.1 christos lpm.l $r0,k_12345678 438 1.1 christos flip.l $r1,$r0,0 439 1.1 christos EXPECT $r1,0x12345678 440 1.1 christos flip.l $r1,$r0,24 441 1.1 christos EXPECT $r1,0x78563412 442 1.1 christos flip.l $r1,$r0,31 443 1.1 christos EXPECT $r1,0x1e6a2c48 444 1.1 christos 445 1.1 christos # stack push pop 446 1.1 christos 447 1.1 christos EXPECT $sp,0x00000000 448 1.1 christos ldk.l $r6,0x6666 449 1.1 christos push.l $r6 450 1.1 christos or.l $r0,$r0,$r0 # xxx 451 1.1 christos EXPECT $sp,0x0000fffc 452 1.1 christos ldi.l $r1,$sp,0 453 1.1 christos EXPECT $r1,0x00006666 454 1.1 christos pop.l $r1 455 1.1 christos EXPECT $r1,0x00006666 456 1.1 christos EXPECT $sp,0x00000000 457 1.1 christos 458 1.1 christos # call/return 459 1.1 christos call fowia 460 1.1 christos push.l $r1 461 1.1 christos call fowia 462 1.1 christos pop.l $r2 463 1.1 christos sub.l $r1,$r1,$r2 464 1.1 christos EXPECT $r1,0x00000008 465 1.1 christos 466 1.1 christos # add,carry 467 1.1 christos 468 1.1 christos ldk.l $r0,0 469 1.1 christos ldk.l $r1,0 470 1.1 christos call add64 471 1.1 christos EXPECT $r1,0x00000000 472 1.1 christos EXPECT $r0,0x00000000 473 1.1 christos 474 1.1 christos lpm.l $r0,k_abcdef01 475 1.1 christos lpm.l $r1,k_abcdef01 476 1.1 christos call add64 477 1.1 christos EXPECT $r1,0x00000001 478 1.1 christos EXPECT $r0,0x579bde02 479 1.1 christos 480 1.1 christos ldk.l $r0,4 481 1.1 christos ldk.l $r1,-5 482 1.1 christos call add64 483 1.1 christos EXPECT $r1,0x00000000 484 1.1 christos EXPECT $r0,0xffffffff 485 1.1 christos 486 1.1 christos ldk.l $r0,5 487 1.1 christos ldk.l $r1,-5 488 1.1 christos call add64 489 1.1 christos EXPECT $r1,0x00000001 490 1.1 christos EXPECT $r0,0x00000000 491 1.1 christos 492 1.1 christos lpm.l $r0,k_12345678 493 1.1 christos ldk.l $r1,-1 494 1.1 christos call add64 495 1.1 christos EXPECT $r1,0x00000001 496 1.1 christos EXPECT $r0,0x12345677 497 1.1 christos 498 1.1 christos ldk.l $r0,-1 499 1.1 christos ldk.l $r1,-1 500 1.1 christos call add64 501 1.1 christos EXPECT $r1,0x00000001 502 1.1 christos EXPECT $r0,0xfffffffe 503 1.1 christos 504 1.1 christos # inline literal 505 1.1 christos call lit 506 1.1 christos .long 0xdecafbad 507 1.1 christos EXPECT $r0,0xdecafbad 508 1.1 christos 509 1.1 christos ldk.l $r1,0xee 510 1.1 christos call lit 511 1.1 christos ldk.l $r1,0xfe 512 1.1 christos EXPECT $r1,0x000000ee 513 1.1 christos 514 1.1 christos call lit 515 1.1 christos .long 0x01020304 516 1.1 christos EXPECT $r0,0x01020304 517 1.1 christos 518 1.1 christos call lit 519 1.1 christos .long lit 520 1.1 christos calli $r0 521 1.1 christos .long 0xffaa55aa 522 1.1 christos EXPECT $r0,0xffaa55aa 523 1.1 christos 524 1.1 christos # comparisons 525 1.1 christos ldk.l $r0,-100 526 1.1 christos ldk.l $r1,100 527 1.1 christos cmp.l $r0,$r1 528 1.1 christos 529 1.1 christos ldk.l $r2,0 530 1.1 christos jmpc lt,.c1 531 1.1 christos ldk.l $r2,1 532 1.1 christos .c1: 533 1.1 christos EXPECT $r2,0x00000000 534 1.1 christos 535 1.1 christos ldk.l $r2,0 536 1.1 christos jmpc gt,.c2 537 1.1 christos ldk.l $r2,1 538 1.1 christos .c2: 539 1.1 christos EXPECT $r2,0x00000001 540 1.1 christos 541 1.1 christos ldk.l $r2,0 542 1.1 christos jmpc a,.c3 543 1.1 christos ldk.l $r2,1 544 1.1 christos .c3: 545 1.1 christos EXPECT $r2,0x00000000 546 1.1 christos 547 1.1 christos ldk.l $r2,0 548 1.1 christos jmpc b,.c4 549 1.1 christos ldk.l $r2,1 550 1.1 christos .c4: 551 1.1 christos EXPECT $r2,0x00000001 552 1.1 christos 553 1.1 christos ldk.l $r2,0 554 1.1 christos jmpc be,.c5 555 1.1 christos ldk.l $r2,1 556 1.1 christos .c5: 557 1.1 christos EXPECT $r2,0x00000001 558 1.1 christos 559 1.1 christos # 8-bit comparisons 560 1.1 christos ldk.l $r0,0x8fe 561 1.1 christos ldk.l $r1,0x708 562 1.1 christos cmp.b $r0,$r1 563 1.1 christos 564 1.1 christos ldk.l $r2,0 565 1.1 christos jmpc lt,.8c1 566 1.1 christos ldk.l $r2,1 567 1.1 christos .8c1: 568 1.1 christos EXPECT $r2,0x00000000 569 1.1 christos 570 1.1 christos ldk.l $r2,0 571 1.1 christos jmpc gt,.8c2 572 1.1 christos ldk.l $r2,1 573 1.1 christos .8c2: 574 1.1 christos EXPECT $r2,0x00000001 575 1.1 christos 576 1.1 christos ldk.l $r2,0 577 1.1 christos jmpc a,.8c3 578 1.1 christos ldk.l $r2,1 579 1.1 christos .8c3: 580 1.1 christos EXPECT $r2,0x00000000 581 1.1 christos 582 1.1 christos ldk.l $r2,0 583 1.1 christos jmpc b,.8c4 584 1.1 christos ldk.l $r2,1 585 1.1 christos .8c4: 586 1.1 christos EXPECT $r2,0x00000001 587 1.1 christos 588 1.1 christos ldk.l $r2,0 589 1.1 christos jmpc be,.8c5 590 1.1 christos ldk.l $r2,1 591 1.1 christos .8c5: 592 1.1 christos EXPECT $r2,0x00000001 593 1.1 christos 594 1.1 christos ldk.l $r0,0x8aa 595 1.1 christos ldk.l $r1,0x7aa 596 1.1 christos cmp.b $r0,$r1 597 1.1 christos 598 1.1 christos ldk.l $r2,0 599 1.1 christos jmpc z,.8c6 600 1.1 christos ldk.l $r2,1 601 1.1 christos .8c6: 602 1.1 christos EXPECT $r2,0x00000000 603 1.1 christos 604 1.1 christos ldk.b $r0,1 605 1.1 christos ldk.b $r2,0xe0 606 1.1 christos cmp.b $r2,0x1c0 607 1.1 christos jmpc a,.8c7 608 1.1 christos ldk.b $r0,0 609 1.1 christos .8c7: 610 1.1 christos EXPECT $r0,0x00000001 611 1.1 christos 612 1.1 christos # conditional call 613 1.1 christos cmp.l $r0,$r0 614 1.1 christos callc z,lit 615 1.1 christos .long 0xccddeeff 616 1.1 christos callc nz,zr0 617 1.1 christos EXPECT $r0,0xccddeeff 618 1.1 christos 619 1.1 christos # modify return address 620 1.1 christos ldk.l $r0,0x66 621 1.1 christos call skip1 622 1.1 christos ldk.l $r0,0xAA 623 1.1 christos EXPECT $r0,0x00000066 624 1.1 christos 625 1.1 christos ldk.l $r0,0x77 626 1.1 christos call skip2 627 1.1 christos ldk.l $r0,0xBB 628 1.1 christos EXPECT $r0,0x00000077 629 1.1 christos 630 1.1 christos # simple recursive function 631 1.1 christos ldk.l $r0,1 632 1.1 christos call factorial 633 1.1 christos EXPECT $r0,0x00000001 634 1.1 christos ldk.l $r0,2 635 1.1 christos call factorial 636 1.1 christos EXPECT $r0,0x00000002 637 1.1 christos ldk.l $r0,3 638 1.1 christos call factorial 639 1.1 christos EXPECT $r0,0x00000006 640 1.1 christos ldk.l $r0,4 641 1.1 christos call factorial 642 1.1 christos EXPECT $r0,0x00000018 643 1.1 christos ldk.l $r0,5 644 1.1 christos call factorial 645 1.1 christos EXPECT $r0,0x00000078 646 1.1 christos ldk.l $r0,6 647 1.1 christos call factorial 648 1.1 christos EXPECT $r0,0x000002d0 649 1.1 christos ldk.l $r0,7 650 1.1 christos call factorial 651 1.1 christos EXPECT $r0,0x000013b0 652 1.1 christos ldk.l $r0,12 653 1.1 christos call factorial 654 1.1 christos EXPECT $r0,0x1c8cfc00 655 1.1 christos 656 1.1 christos # read sp after a call 657 1.1 christos call nullfunc 658 1.1 christos EXPECT $sp,0x00000000 659 1.1 christos 660 1.1 christos # CALLI->RETURN 661 1.1 christos ldk.l $r4,nullfunc 662 1.1 christos calli $r4 663 1.1 christos EXPECT $sp,0x00000000 664 1.1 christos 665 1.1 christos # Link/unlink 666 1.1 christos ldk.l $r14,0x17566 667 1.1 christos 668 1.1 christos link $r14,48 669 1.1 christos EXPECT $r14,0x0000fffc 670 1.1 christos sub.l $sp,$sp,200 671 1.1 christos unlink $r14 672 1.1 christos EXPECT $r14,0x00017566 673 1.1 christos 674 1.1 christos # LINK->UNLINK 675 1.1 christos link $r14,48 676 1.1 christos unlink $r14 677 1.1 christos EXPECT $r14,0x00017566 678 1.1 christos 679 1.1 christos # LINK->JUMPI 680 1.1 christos ldk.l $r3,.here 681 1.1 christos link $r14,48 682 1.1 christos jmpi $r3 683 1.1 christos jmp failcase 684 1.1 christos .here: 685 1.1 christos unlink $r14 686 1.1 christos EXPECT $r14,0x00017566 687 1.1 christos 688 1.1 christos # LINK->RETURN 689 1.1 christos # (This is a nonsense combination, but can still exericse it by 690 1.1 christos # using a negative parameter for the link. "link $r14,-4" leaves 691 1.1 christos # $sp exactly unchanged.) 692 1.1 christos ldk.l $r0,.returnhere 693 1.1 christos push.l $r0 694 1.1 christos link $r14,0xfffc 695 1.1 christos return 696 1.1 christos .returnhere: 697 1.1 christos EXPECT $sp,0x00000000 698 1.1 christos 699 1.1 christos # LPMI->CALLI 700 1.1 christos ldk.l $r0,k_abcdef01 701 1.1 christos ldk.l $r1,increment 702 1.1 christos lpmi.l $r0,$r0,0 703 1.1 christos calli $r1 704 1.1 christos EXPECT $r0,0xabcdef02 705 1.1 christos 706 1.1 christos # STRLen 707 1.1 christos lpm.l $r4,str3 708 1.1 christos sta.l tmp,$r4 709 1.1 christos ldk.l $r0,tmp 710 1.1 christos strlen.b $r1,$r0 711 1.1 christos EXPECT $r1,0x00000003 712 1.1 christos strlen.s $r1,$r0 713 1.1 christos EXPECT $r1,0x00000003 714 1.1 christos strlen.l $r1,$r0 715 1.1 christos EXPECT $r1,0x00000003 716 1.1 christos 717 1.1 christos ldk.l $r4,0 718 1.1 christos sta.b 4,$r4 719 1.1 christos strlen.l $r1,$r0 720 1.1 christos EXPECT $r1,0x00000000 721 1.1 christos 722 1.1 christos ldk.l $r4,-1 723 1.1 christos sta.l 4,$r4 724 1.1 christos lpm.l $r4,str3 725 1.1 christos sta.l 8,$r4 726 1.1 christos strlen.l $r1,$r0 727 1.1 christos EXPECT $r1,0x00000007 728 1.1 christos 729 1.1 christos # MEMSet 730 1.1 christos ldk.l $r0,4 731 1.1 christos ldk.l $r1,0xaa 732 1.1 christos memset.s $r0,$r1,8 733 1.1 christos ldk.l $r1,0x55 734 1.1 christos memset.b $r0,$r1,5 735 1.1 christos lda.l $r0,4 736 1.1 christos EXPECT $r0,0x55555555 737 1.1 christos lda.l $r0,8 738 1.1 christos EXPECT $r0,0xaaaaaa55 739 1.1 christos 740 1.1 christos # first cycle after mispredict 741 1.1 christos ldk.l $r0,3 742 1.1 christos cmp.l $r0,$r0 743 1.1 christos jmpc nz,failcase 744 1.1 christos add.l $r0,$r0,7 745 1.1 christos EXPECT $r0,0x0000000a 746 1.1 christos jmpc nz,failcase 747 1.1 christos push.l $r0 748 1.1 christos EXPECT $sp,0x0000fffc 749 1.1 christos pop.l $r0 750 1.1 christos 751 1.1 christos # $sp access after stall 752 1.1 christos lpm.l $r13,0 753 1.1 christos push.l $r0 754 1.1 christos EXPECT $sp,0x0000fffc 755 1.1 christos pop.l $r0 756 1.1 christos 757 1.1 christos push.l $r0 758 1.1 christos add.l $sp,$sp,-484 759 1.1 christos EXPECT $sp,0x0000fe18 760 1.1 christos EXPECT $sp,0x0000fe18 761 1.1 christos EXPECT $sp,0x0000fe18 762 1.1 christos add.l $sp,$sp,484 763 1.1 christos EXPECT $sp,0x0000fffc 764 1.1 christos pop.l $r0 765 1.1 christos 766 1.1 christos # atomic exchange 767 1.1 christos lpm.l $r0,k_12345678 768 1.1 christos lpm.l $r1,k_abcdef01 769 1.1 christos sta.l 100,$r1 770 1.1 christos exa.l $r0,100 771 1.1 christos EXPECT $r0,0xabcdef01 772 1.1 christos lda.l $r0,100 773 1.1 christos EXPECT $r0,0x12345678 774 1.1 christos 775 1.1 christos lpm.l $r0,k_12345678 776 1.1 christos lpm.l $r1,k_abcdef01 777 1.1 christos sta.l 144,$r1 778 1.1 christos ldk.l $r7,20 779 1.1 christos exi.l $r0,$r7,124 780 1.1 christos EXPECT $r0,0xabcdef01 781 1.1 christos lda.l $r0,144 782 1.1 christos EXPECT $r0,0x12345678 783 1.1 christos 784 1.1 christos lpm.l $r0,k_12345678 785 1.1 christos lpm.l $r1,k_abcdef01 786 1.1 christos push $r1 787 1.1 christos exi.l $r0,$sp,0 788 1.1 christos EXPECT $r0,0xabcdef01 789 1.1 christos pop.l $r0 790 1.1 christos EXPECT $r0,0x12345678 791 1.1 christos 792 1.1 christos # PM write port 793 1.1 christos .equ PM_UNLOCK, 0x1fc80 794 1.1 christos .equ PM_ADDR, 0x1fc84 795 1.1 christos .equ PM_DATA, 0x1fc88 796 1.1 christos 797 1.1 christos lpm.l $r0,k_12345678 798 1.1 christos lpm.l $r1,k_abcdef01 799 1.1 christos EXPECT $r0,0x12345678 800 1.1 christos EXPECT $r1,0xabcdef01 801 1.1 christos ldk.l $r3,(0x1337f7d1 >> 10) 802 1.1 christos ldl.l $r3,$r3,(0x1337f7d1 & 0x3ff) 803 1.1 christos EXPECT $r3,0x1337f7d1 804 1.1 christos ldk $r4,k_12345678 805 1.1 christos sta.l PM_ADDR,$r4 806 1.1 christos 807 1.1 christos # write while locked does nothing 808 1.1 christos sta.l PM_DATA,$r1 809 1.1 christos sta.l PM_DATA,$r0 810 1.1 christos lpm.l $r0,k_12345678 811 1.1 christos lpm.l $r1,k_abcdef01 812 1.1 christos EXPECT $r0,0x12345678 813 1.1 christos EXPECT $r1,0xabcdef01 814 1.1 christos 815 1.1 christos # write while unlocked modifies program memory 816 1.1 christos sta.l PM_UNLOCK,$r3 817 1.1 christos sta.l PM_DATA,$r1 818 1.1 christos sta.l PM_DATA,$r0 819 1.1 christos lpm.l $r0,k_12345678 820 1.1 christos lpm.l $r1,k_abcdef01 821 1.1 christos EXPECT $r0,0xabcdef01 822 1.1 christos EXPECT $r1,0x12345678 823 1.1 christos 824 1.1 christos # final stack check 825 1.1 christos EXPECT $sp,0x00000000 826 1.1 christos 827 1.1 christos PASS 828 1.1 christos 829 1.1 christos # -------------------------------------------------- 830 1.1 christos 831 1.1 christos skip1: # skip the instruction after the call 832 1.1 christos pop.l $r1 833 1.1 christos add.l $r1,$r1,4 834 1.1 christos push.l $r1 835 1.1 christos return 836 1.1 christos 837 1.1 christos skipparent: # skip the instruction after the caller's call 838 1.1 christos ldi.l $r1,$sp,4 839 1.1 christos add.l $r1,$r1,4 840 1.1 christos sti.l $sp,4,$r1 841 1.1 christos return 842 1.1 christos skip2: 843 1.1 christos call skipparent 844 1.1 christos return 845 1.1 christos 846 1.1 christos add64: 847 1.1 christos addcc.l $r0,$r1 848 1.1 christos add.l $r0,$r0,$r1 849 1.1 christos ldk.l $r1,0 850 1.1 christos jmpc nc,.done 851 1.1 christos ldk.l $r1,1 852 1.1 christos .done: 853 1.1 christos return 854 1.1 christos 855 1.1 christos fowia: # find out where I'm at 856 1.1 christos ldi.l $r1,$sp,0 857 1.1 christos return 858 1.1 christos 859 1.1 christos lit: # load literal to $r0 860 1.1 christos pop.l $r14 861 1.1 christos lpmi.l $r0,$r14,0 862 1.1 christos add.l $r14,$r14,4 863 1.1 christos jmpi $r14 864 1.1 christos zr0: 865 1.1 christos ldk.l $r0,0 866 1.1 christos return 867 1.1 christos litr1: 868 1.1 christos ldi.l $r1,$sp,0 869 1.1 christos add.l $r1,$r1,4 870 1.1 christos sti.l $sp,0,$r1 871 1.1 christos lpmi.l $r1,$r1,-4 872 1.1 christos return 873 1.1 christos 874 1.1 christos factorial: 875 1.1 christos ldk.l $r1,1 876 1.1 christos cmp.l $r0,$r1 877 1.1 christos jmpc z,.factdone 878 1.1 christos push.l $r0 879 1.1 christos add.l $r0,$r0,-1 880 1.1 christos call factorial 881 1.1 christos pop.l $r1 882 1.1 christos mul.l $r0,$r0,$r1 883 1.1 christos .factdone: 884 1.1 christos return 885 1.1 christos 886 1.1 christos nullfunc: 887 1.1 christos return 888 1.1 christos 889 1.1 christos increment: 890 1.1 christos add.l $r0,$r0,1 891 1.1 christos return 892 1.1 christos 893 1.1 christos .long 0x10111213 894 1.1 christos k_12345678: 895 1.1 christos .long 0x12345678 896 1.1 christos k_abcdef01: 897 1.1 christos .long 0xabcdef01 898 1.1 christos str3: 899 1.1 christos .string "abc" 900