Showing the changes to tests/asmtest.S (1 of 16 files). Show all
Unified · Split
| @@ -0,0 +1,558 @@ | |||
| 1 | |||
| 2 | /* some directive tests */ | ||
| 3 | |||
| 4 | .byte 0xff | ||
| 5 | .byte 1, 2, 3 | ||
| 6 | .short 1, 2, 3 | ||
| 7 | .word 1, 2, 3 | ||
| 8 | .long 1, 2, 3 | ||
| 9 | .int 1, 2, 3 | ||
| 10 | .align 8 | ||
| 11 | .byte 1 | ||
| 12 | .align 16, 0x90 | ||
| 13 | .skip 3 | ||
| 14 | .skip 15, 0x90 | ||
| 15 | .string "hello\0world" | ||
| 16 | |||
| 17 | /* some label tests */ | ||
| 18 | |||
| 19 | movl %eax, %ebx | ||
| 20 | L1: | ||
| 21 | movl %eax, %ebx | ||
| 22 | mov 0x10000, %eax | ||
| 23 | L2: | ||
| 24 | movl $L2 - L1, %ecx | ||
| 25 | var1: | ||
| 26 | nop ; nop ; nop ; nop | ||
| 27 | |||
| 28 | mov var1, %eax | ||
| 29 | |||
| 30 | /* instruction tests */ | ||
| 31 | movl %eax, %ebx | ||
| 32 | mov 0x10000, %eax | ||
| 33 | mov 0x10000, %ax | ||
| 34 | mov 0x10000, %al | ||
| 35 | mov %al, 0x10000 | ||
| 36 | |||
| 37 | mov $1, %edx | ||
| 38 | mov $1, %dx | ||
| 39 | mov $1, %dl | ||
| 40 | movb $2, 0x100(%ebx,%edx,2) | ||
| 41 | movw $2, 0x100(%ebx,%edx,2) | ||
| 42 | movl $2, 0x100(%ebx,%edx,2) | ||
| 43 | movl %eax, 0x100(%ebx,%edx,2) | ||
| 44 | movl 0x100(%ebx,%edx,2), %edx | ||
| 45 | movw %ax, 0x100(%ebx,%edx,2) | ||
| 46 | |||
| 47 | mov %eax, 0x12(,%edx,2) | ||
| 48 | |||
| 49 | mov %cr3, %edx | ||
| 50 | mov %ecx, %cr3 | ||
| 51 | movl %cr3, %eax | ||
| 52 | movl %tr3, %eax | ||
| 53 | movl %db3, %ebx | ||
| 54 | movl %dr6, %eax | ||
| 55 | movl %fs, %ecx | ||
| 56 | movl %ebx, %fs | ||
| 57 | |||
| 58 | movsbl 0x1000, %eax | ||
| 59 | movsbw 0x1000, %ax | ||
| 60 | movswl 0x1000, %eax | ||
| 61 | |||
| 62 | movzbl 0x1000, %eax | ||
| 63 | movzbw 0x1000, %ax | ||
| 64 | movzwl 0x1000, %eax | ||
| 65 | |||
| 66 | movzb 0x1000, %eax | ||
| 67 | movzb 0x1000, %ax | ||
| 68 | |||
| 69 | |||
| 70 | pushl %eax | ||
| 71 | pushw %ax | ||
| 72 | push %eax | ||
| 73 | push %cs | ||
| 74 | push %gs | ||
| 75 | push $1 | ||
| 76 | push $100 | ||
| 77 | |||
| 78 | popl %eax | ||
| 79 | popw %ax | ||
| 80 | pop %eax | ||
| 81 | pop %ds | ||
| 82 | pop %fs | ||
| 83 | |||
| 84 | xchg %eax, %ecx | ||
| 85 | xchg %edx, %eax | ||
| 86 | xchg %bx, 0x10000 | ||
| 87 | xchg 0x10000, %ebx | ||
| 88 | xchg 0x10000, %dl | ||
| 89 | |||
| 90 | in $100, %al | ||
| 91 | in $100, %ax | ||
| 92 | in $100, %eax | ||
| 93 | in %dx, %al | ||
| 94 | in %dx, %ax | ||
| 95 | in %dx, %eax | ||
| 96 | inb %dx | ||
| 97 | inw %dx | ||
| 98 | inl %dx | ||
| 99 | |||
| 100 | out %al, $100 | ||
| 101 | out %ax, $100 | ||
| 102 | out %eax, $100 | ||
| 103 | |||
| 104 | /* NOTE: gas is bugged here, so size must be added */ | ||
| 105 | outb %al, %dx | ||
| 106 | outw %ax, %dx | ||
| 107 | outl %eax, %dx | ||
| 108 | |||
| 109 | leal 0x1000(%ebx), %ecx | ||
| 110 | lea 0x1000(%ebx), %ecx | ||
| 111 | |||
| 112 | les 0x2000, %eax | ||
| 113 | lds 0x2000, %ebx | ||
| 114 | lfs 0x2000, %ecx | ||
| 115 | lgs 0x2000, %edx | ||
| 116 | lss 0x2000, %edx | ||
| 117 | |||
| 118 | addl $0x123, %eax | ||
| 119 | add $0x123, %ebx | ||
| 120 | addl $0x123, 0x100 | ||
| 121 | addl $0x123, 0x100(%ebx) | ||
| 122 | addl $0x123, 0x100(%ebx,%edx,2) | ||
| 123 | addl $0x123, 0x100(%esp) | ||
| 124 | addl $0x123, (%ebp) | ||
| 125 | addl $0x123, (%esp) | ||
| 126 | cmpl $0x123, (%esp) | ||
| 127 | |||
| 128 | add %eax, (%ebx) | ||
| 129 | add (%ebx), %eax | ||
| 130 | |||
| 131 | or %dx, (%ebx) | ||
| 132 | or (%ebx), %si | ||
| 133 | |||
| 134 | add %cl, (%ebx) | ||
| 135 | add (%ebx), %dl | ||
| 136 | |||
| 137 | inc %edx | ||
| 138 | incl 0x10000 | ||
| 139 | incb 0x10000 | ||
| 140 | dec %dx | ||
| 141 | |||
| 142 | test $1, %al | ||
| 143 | test $1, %cl | ||
| 144 | |||
| 145 | testl $1, 0x1000 | ||
| 146 | testb $1, 0x1000 | ||
| 147 | testw $1, 0x1000 | ||
| 148 | test %eax, %ebx | ||
| 149 | test %eax, 0x1000 | ||
| 150 | test 0x1000, %edx | ||
| 151 | |||
| 152 | not %edx | ||
| 153 | notw 0x10000 | ||
| 154 | notl 0x10000 | ||
| 155 | notb 0x10000 | ||
| 156 | |||
| 157 | neg %edx | ||
| 158 | negw 0x10000 | ||
| 159 | negl 0x10000 | ||
| 160 | negb 0x10000 | ||
| 161 | |||
| 162 | imul %ecx | ||
| 163 | mul %edx | ||
| 164 | mulb %cl | ||
| 165 | |||
| 166 | imul %eax, %ecx | ||
| 167 | imul 0x1000, %cx | ||
| 168 | imul $10, %eax, %ecx | ||
| 169 | imul $10, %ax, %cx | ||
| 170 | imul $10, %eax | ||
| 171 | imul $0x1100000, %eax | ||
| 172 | imul $1, %eax | ||
| 173 | |||
| 174 | idivw 0x1000 | ||
| 175 | div %ecx | ||
| 176 | div %bl | ||
| 177 | div %ecx, %eax | ||
| 178 | |||
| 179 | |||
| 180 | shl %edx | ||
| 181 | shl $10, %edx | ||
| 182 | shl %cl, %edx | ||
| 183 | |||
| 184 | shld $1, %eax, %edx | ||
| 185 | shld %cl, %eax, %edx | ||
| 186 | shld %eax, %edx | ||
| 187 | |||
| 188 | shrd $1, %eax, %edx | ||
| 189 | shrd %cl, %eax, %edx | ||
| 190 | shrd %eax, %edx | ||
| 191 | |||
| 192 | L4: | ||
| 193 | call 0x1000 | ||
| 194 | call L4 | ||
| 195 | call *%eax | ||
| 196 | call *0x1000 | ||
| 197 | call func1 | ||
| 198 | |||
| 199 | lcall $0x100, $0x1000 | ||
| 200 | |||
| 201 | jmp 0x1000 | ||
| 202 | jmp *%eax | ||
| 203 | jmp *0x1000 | ||
| 204 | |||
| 205 | ljmp $0x100, $0x1000 | ||
| 206 | |||
| 207 | ret | ||
| 208 | |||
| 209 | ret $10 | ||
| 210 | |||
| 211 | lret | ||
| 212 | |||
| 213 | lret $10 | ||
| 214 | |||
| 215 | enter $1234, $10 | ||
| 216 | |||
| 217 | L3: | ||
| 218 | jo 0x1000 | ||
| 219 | jnp 0x1001 | ||
| 220 | jne 0x1002 | ||
| 221 | jg 0x1003 | ||
| 222 | |||
| 223 | jo L3 | ||
| 224 | jnp L3 | ||
| 225 | jne L3 | ||
| 226 | jg L3 | ||
| 227 | |||
| 228 | loopne L3 | ||
| 229 | loopnz L3 | ||
| 230 | loope L3 | ||
| 231 | loopz L3 | ||
| 232 | loop L3 | ||
| 233 | jecxz L3 | ||
| 234 | |||
| 235 | |||
| 236 | seto %al | ||
| 237 | setnp 0x1000 | ||
| 238 | setl 0xaaaa | ||
| 239 | setg %dl | ||
| 240 | |||
| 241 | fadd | ||
| 242 | fadd %st(1), %st | ||
| 243 | fadd %st(3) | ||
| 244 | |||
| 245 | faddp %st(5) | ||
| 246 | faddp | ||
| 247 | faddp %st(1), %st | ||
| 248 | |||
| 249 | fadds 0x1000 | ||
| 250 | fiadds 0x1002 | ||
| 251 | faddl 0x1004 | ||
| 252 | fiaddl 0x1006 | ||
| 253 | |||
| 254 | fmul | ||
| 255 | fmul %st(1), %st | ||
| 256 | fmul %st(3) | ||
| 257 | |||
| 258 | fmulp %st(5) | ||
| 259 | fmulp | ||
| 260 | fmulp %st(1), %st | ||
| 261 | |||
| 262 | fmuls 0x1000 | ||
| 263 | fimuls 0x1002 | ||
| 264 | fmull 0x1004 | ||
| 265 | fimull 0x1006 | ||
| 266 | |||
| 267 | fsub | ||
| 268 | fsub %st(1), %st | ||
| 269 | fsub %st(3) | ||
| 270 | |||
| 271 | fsubp %st(5) | ||
| 272 | fsubp | ||
| 273 | fsubp %st(1), %st | ||
| 274 | |||
| 275 | fsubs 0x1000 | ||
| 276 | fisubs 0x1002 | ||
| 277 | fsubl 0x1004 | ||
| 278 | fisubl 0x1006 | ||
| 279 | |||
| 280 | fsubr | ||
| 281 | fsubr %st(1), %st | ||
| 282 | fsubr %st(3) | ||
| 283 | |||
| 284 | fsubrp %st(5) | ||
| 285 | fsubrp | ||
| 286 | fsubrp %st(1), %st | ||
| 287 | |||
| 288 | fsubrs 0x1000 | ||
| 289 | fisubrs 0x1002 | ||
| 290 | fsubrl 0x1004 | ||
| 291 | fisubrl 0x1006 | ||
| 292 | |||
| 293 | fdiv | ||
| 294 | fdiv %st(1), %st | ||
| 295 | fdiv %st(3) | ||
| 296 | |||
| 297 | fdivp %st(5) | ||
| 298 | fdivp | ||
| 299 | fdivp %st(1), %st | ||
| 300 | |||
| 301 | fdivs 0x1000 | ||
| 302 | fidivs 0x1002 | ||
| 303 | fdivl 0x1004 | ||
| 304 | fidivl 0x1006 | ||
| 305 | |||
| 306 | fcom %st(3) | ||
| 307 | |||
| 308 | fcoms 0x1000 | ||
| 309 | ficoms 0x1002 | ||
| 310 | fcoml 0x1004 | ||
| 311 | ficoml 0x1006 | ||
| 312 | |||
| 313 | fcomp %st(5) | ||
| 314 | fcomp | ||
| 315 | fcompp | ||
| 316 | |||
| 317 | fcomps 0x1000 | ||
| 318 | ficomps 0x1002 | ||
| 319 | fcompl 0x1004 | ||
| 320 | ficompl 0x1006 | ||
| 321 | |||
| 322 | fld %st(5) | ||
| 323 | fldl 0x1000 | ||
| 324 | flds 0x1002 | ||
| 325 | fildl 0x1004 | ||
| 326 | fst %st(4) | ||
| 327 | fstp %st(6) | ||
| 328 | fstpt 0x1006 | ||
| 329 | fbstp 0x1008 | ||
| 330 | |||
| 331 | fxch | ||
| 332 | fxch %st(4) | ||
| 333 | |||
| 334 | fucom %st(6) | ||
| 335 | fucomp %st(3) | ||
| 336 | fucompp | ||
| 337 | |||
| 338 | finit | ||
| 339 | fninit | ||
| 340 | fldcw 0x1000 | ||
| 341 | fnstcw 0x1002 | ||
| 342 | fstcw 0x1002 | ||
| 343 | fnstsw 0x1004 | ||
| 344 | fnstsw %eax | ||
| 345 | fstsw 0x1004 | ||
| 346 | fstsw %eax | ||
| 347 | fnclex | ||
| 348 | fclex | ||
| 349 | fnstenv 0x1000 | ||
| 350 | fstenv 0x1000 | ||
| 351 | fldenv 0x1000 | ||
| 352 | fnsave 0x1002 | ||
| 353 | fsave 0x1000 | ||
| 354 | frstor 0x1000 | ||
| 355 | ffree %st(7) | ||
| 356 | ffreep %st(6) | ||
| 357 | |||
| 358 | ftst | ||
| 359 | fxam | ||
| 360 | fld1 | ||
| 361 | fldl2t | ||
| 362 | fldl2e | ||
| 363 | fldpi | ||
| 364 | fldlg2 | ||
| 365 | fldln2 | ||
| 366 | fldz | ||
| 367 | |||
| 368 | f2xm1 | ||
| 369 | fyl2x | ||
| 370 | fptan | ||
| 371 | fpatan | ||
| 372 | fxtract | ||
| 373 | fprem1 | ||
| 374 | fdecstp | ||
| 375 | fincstp | ||
| 376 | fprem | ||
| 377 | fyl2xp1 | ||
| 378 | fsqrt | ||
| 379 | fsincos | ||
| 380 | frndint | ||
| 381 | fscale | ||
| 382 | fsin | ||
| 383 | fcos | ||
| 384 | fchs | ||
| 385 | fabs | ||
| 386 | fnop | ||
| 387 | fwait | ||
| 388 | |||
| 389 | bswap %edx | ||
| 390 | xadd %ecx, %edx | ||
| 391 | xaddb %dl, 0x1000 | ||
| 392 | xaddw %ax, 0x1000 | ||
| 393 | xaddl %eax, 0x1000 | ||
| 394 | cmpxchg %ecx, %edx | ||
| 395 | cmpxchgb %dl, 0x1000 | ||
| 396 | cmpxchgw %ax, 0x1000 | ||
| 397 | cmpxchgl %eax, 0x1000 | ||
| 398 | invlpg 0x1000 | ||
| 399 | cmpxchg8b 0x1002 | ||
| 400 | |||
| 401 | fcmovb %st(5), %st | ||
| 402 | fcmove %st(5), %st | ||
| 403 | fcmovbe %st(5), %st | ||
| 404 | fcmovu %st(5), %st | ||
| 405 | fcmovnb %st(5), %st | ||
| 406 | fcmovne %st(5), %st | ||
| 407 | fcmovnbe %st(5), %st | ||
| 408 | fcmovnu %st(5), %st | ||
| 409 | fcomi %st(5), %st | ||
| 410 | fucomi %st(5), %st | ||
| 411 | fcomip %st(5), %st | ||
| 412 | fucomip %st(5), %st | ||
| 413 | |||
| 414 | |||
| 415 | |||
| 416 | cmovo 0x1000, %eax | ||
| 417 | cmovs 0x1000, %eax | ||
| 418 | cmovns %edx, %edi | ||
| 419 | |||
| 420 | int $3 | ||
| 421 | int $0x10 | ||
| 422 | |||
| 423 | pusha | ||
| 424 | popa | ||
| 425 | clc | ||
| 426 | cld | ||
| 427 | cli | ||
| 428 | clts | ||
| 429 | cmc | ||
| 430 | lahf | ||
| 431 | sahf | ||
| 432 | pushfl | ||
| 433 | popfl | ||
| 434 | pushf | ||
| 435 | popf | ||
| 436 | stc | ||
| 437 | std | ||
| 438 | sti | ||
| 439 | aaa | ||
| 440 | aas | ||
| 441 | daa | ||
| 442 | das | ||
| 443 | aad | ||
| 444 | aam | ||
| 445 | cbw | ||
| 446 | cwd | ||
| 447 | cwde | ||
| 448 | cdq | ||
| 449 | cbtw | ||
| 450 | cwtd | ||
| 451 | cwtl | ||
| 452 | cltd | ||
| 453 | leave | ||
| 454 | int3 | ||
| 455 | into | ||
| 456 | iret | ||
| 457 | rsm | ||
| 458 | hlt | ||
| 459 | wait | ||
| 460 | nop | ||
| 461 | |||
| 462 | /* XXX: handle prefixes */ | ||
| 463 | #if 0 | ||
| 464 | aword | ||
| 465 | addr16 | ||
| 466 | #endif | ||
| 467 | lock | ||
| 468 | rep | ||
| 469 | repe | ||
| 470 | repz | ||
| 471 | repne | ||
| 472 | repnz | ||
| 473 | |||
| 474 | invd | ||
| 475 | wbinvd | ||
| 476 | cpuid | ||
| 477 | wrmsr | ||
| 478 | rdtsc | ||
| 479 | rdmsr | ||
| 480 | rdpmc | ||
| 481 | ud2 | ||
| 482 | |||
| 483 | emms | ||
| 484 | movd %edx, %mm3 | ||
| 485 | movd 0x1000, %mm2 | ||
| 486 | movd %mm4, %ecx | ||
| 487 | movd %mm5, 0x1000 | ||
| 488 | |||
| 489 | movq 0x1000, %mm2 | ||
| 490 | movq %mm4, 0x1000 | ||
| 491 | |||
| 492 | pand 0x1000, %mm3 | ||
| 493 | pand %mm4, %mm5 | ||
| 494 | |||
| 495 | psllw $1, %mm6 | ||
| 496 | psllw 0x1000, %mm7 | ||
| 497 | psllw %mm2, %mm7 | ||
| 498 | |||
| 499 | xlat | ||
| 500 | cmpsb | ||
| 501 | scmpw | ||
| 502 | insl | ||
| 503 | outsw | ||
| 504 | lodsb | ||
| 505 | slodl | ||
| 506 | movsb | ||
| 507 | movsl | ||
| 508 | smovb | ||
| 509 | scasb | ||
| 510 | sscaw | ||
| 511 | stosw | ||
| 512 | sstol | ||
| 513 | |||
| 514 | bsf 0x1000, %ebx | ||
| 515 | bsr 0x1000, %ebx | ||
| 516 | bt %edx, 0x1000 | ||
| 517 | btl $2, 0x1000 | ||
| 518 | btc %edx, 0x1000 | ||
| 519 | btcl $2, 0x1000 | ||
| 520 | btr %edx, 0x1000 | ||
| 521 | btrl $2, 0x1000 | ||
| 522 | bts %edx, 0x1000 | ||
| 523 | btsl $2, 0x1000 | ||
| 524 | |||
| 525 | |||
| 526 | |||
| 527 | boundl %edx, 0x10000 | ||
| 528 | boundw %bx, 0x1000 | ||
| 529 | |||
| 530 | arpl %bx, 0x1000 | ||
| 531 | lar 0x1000, %eax | ||
| 532 | lgdt 0x1000 | ||
| 533 | lidt 0x1000 | ||
| 534 | lldt 0x1000 | ||
| 535 | lmsw 0x1000 | ||
| 536 | lsl 0x1000, %ecx | ||
| 537 | ltr 0x1000 | ||
| 538 | |||
| 539 | sgdt 0x1000 | ||
| 540 | sidt 0x1000 | ||
| 541 | sldt 0x1000 | ||
| 542 | smsw 0x1000 | ||
| 543 | str 0x1000 | ||
| 544 | |||
| 545 | verr 0x1000 | ||
| 546 | verw 0x1000 | ||
| 547 | |||
| 548 | push %ds | ||
| 549 | pushw %ds | ||
| 550 | pushl %ds | ||
| 551 | pop %ds | ||
| 552 | popw %ds | ||
| 553 | popl %ds | ||
| 554 | fxsave 1(%ebx) | ||
| 555 | fxrstor 1(%ecx) | ||
| 556 | pushl $1 | ||
| 557 | pushw $1 | ||
| 558 | push $1 | ||