Changes between Version 1 and Version 2 of GcnInstrsFlat
- Timestamp:
- 05/02/16 22:00:24 (8 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
GcnInstrsFlat
v1 v2 6 6 FLAT instructions fetch address from 2 vector registers that hold 64-bit address. 7 7 FLAT instruction presents only in GCN 1.1 architecture.</p> 8 <p>List of fields for the MUBUFencoding (GCN 1.1):</p>8 <p>List of fields for the FLAT encoding (GCN 1.1):</p> 9 9 <table> 10 10 <thead> … … 66 66 to main memory, or LKGMCNT if accesses to LDS.</p> 67 67 <h3>Instructions by opcode</h3> 68 <p>List of the MUBUFinstructions by opcode (GCN 1.1/1.2):</p>68 <p>List of the FLAT instructions by opcode (GCN 1.1/1.2):</p> 69 69 <table> 70 70 <thead> … … 407 407 </tr> 408 408 <tr> 409 <td> 81(0x61)</td>409 <td>97 (0x61)</td> 410 410 <td>--</td> 411 411 <td>FLAT_ATOMIC_CMPSWAP_X2</td> 412 412 </tr> 413 413 <tr> 414 <td> 82(0x62)</td>414 <td>98 (0x62)</td> 415 415 <td>--</td> 416 416 <td>FLAT_ATOMIC_ADD_X2</td> 417 417 </tr> 418 418 <tr> 419 <td> 83(0x63)</td>419 <td>99 (0x63)</td> 420 420 <td>--</td> 421 421 <td>FLAT_ATOMIC_SUB_X2</td> 422 422 </tr> 423 423 <tr> 424 <td> 84(0x64)</td>424 <td>100 (0x64)</td> 425 425 <td>--</td> 426 426 <td>FLAT_ATOMIC_SMIN_X2</td> 427 427 </tr> 428 428 <tr> 429 <td> 85(0x65)</td>429 <td>101 (0x65)</td> 430 430 <td>--</td> 431 431 <td>FLAT_ATOMIC_UMIN_X2</td> 432 432 </tr> 433 433 <tr> 434 <td> 86(0x66)</td>434 <td>102 (0x66)</td> 435 435 <td>--</td> 436 436 <td>FLAT_ATOMIC_SMAX_X2</td> 437 437 </tr> 438 438 <tr> 439 <td> 87(0x67)</td>439 <td>103 (0x67)</td> 440 440 <td>--</td> 441 441 <td>FLAT_ATOMIC_UMAX_X2</td> 442 442 </tr> 443 443 <tr> 444 <td> 88(0x68)</td>444 <td>104 (0x68)</td> 445 445 <td>--</td> 446 446 <td>FLAT_ATOMIC_AND_X2</td> 447 447 </tr> 448 448 <tr> 449 <td> 89(0x69)</td>449 <td>105 (0x69)</td> 450 450 <td>--</td> 451 451 <td>FLAT_ATOMIC_OR_X2</td> 452 452 </tr> 453 453 <tr> 454 <td> 90(0x6a)</td>454 <td>106 (0x6a)</td> 455 455 <td>--</td> 456 456 <td>FLAT_ATOMIC_XOR_X2</td> 457 457 </tr> 458 458 <tr> 459 <td> 91(0x6b)</td>459 <td>107 (0x6b)</td> 460 460 <td>--</td> 461 461 <td>FLAT_ATOMIC_INC_X2</td> 462 462 </tr> 463 463 <tr> 464 <td> 92(0x6c)</td>464 <td>108 (0x6c)</td> 465 465 <td>--</td> 466 466 <td>FLAT_ATOMIC_DEC_X2</td> … … 470 470 <h3>Instruction set</h3> 471 471 <p>Alphabetically sorted instruction list:</p> 472 <h4>BUFFER_ATOMIC_CMPSWAP</h4> 473 <p>Opcode: 49 (0x31) for GCN 1.0/1.1; 65 (0x41) for GCN 1.2<br /> 474 Syntax: FLAT_ATOMIC_CMPSWAP VDST, VADDR(2), VDATA(2)<br /> 475 Description: Store lower VDATA dword into VADDR address if previous value 476 from that address is equal VDATA>>32, otherwise keep old value from address. 477 If GLC flag is set then return previous value from resource to VDST, 478 otherwise keep VDST value. Operation is atomic.<br /> 479 Operation:<br /> 480 <code>UINT32* VM = (UINT32*)VADDR 481 UINT32 P = *VM; *VM = *VM==(VDATA>>32) ? VDATA&0xffffffff : *VM // part of atomic 482 VDST = (GLC) ? P : VDST // last part of atomic</code></p> 483 <h4>BUFFER_ATOMIC_CMPSWAP_X2</h4> 484 <p>Opcode: 81 (0x51) for GCN 1.0/1.1; 97 (0x61) for GCN 1.2<br /> 485 Syntax: FLAT_ATOMIC_CMPSWAP_X2 VDST(2), VADDR(2), VDATA(4)<br /> 486 Description: Store lower VDATA 64-bit word into VADDR address if previous value 487 from resource is equal VDATA>>64, otherwise keep old value from VADDR. 488 If GLC flag is set then return previous value from VADDR to VDST, 489 otherwise keep VDST value. Operation is atomic.<br /> 490 Operation:<br /> 491 <code>UINT64* VM = (UINT64*)VADDR 492 UINT64 P = *VM; *VM = *VM==(VDATA[2:3]) ? VDATA[0:1] : *VM // part of atomic 493 VDST = (GLC) ? P : VDST // last part of atomic</code></p> 472 494 <h4>FLAT_ATOMIC_SWAP</h4> 473 495 <p>Opcode: 48 (0x30) for GCN 1.0/1.1; 64 (0x40) for GCN 1.2<br /> 474 496 Syntax: FLAT_ATOMIC_SWAP VDST, VADDR(2), VDATA 475 497 Description: Store VDATA dword into VADDR address. If GLC flag is set then 476 return previous value from resource to VDST, otherwise store old value from VDATA toVDST.498 return previous value from VADDR address to VDST, otherwise keep old value from VDST. 477 499 Operation is atomic.<br /> 478 500 Operation:<br /> 479 501 <code>UINT32* VM = (UINT32*)VADDR 480 UINT32 P = *VM; *VM = VDATA; VDST = (GLC) ? P : VDATA // atomic</code></p> 502 UINT32 P = *VM; *VM = VDATA; VDST = (GLC) ? P : VDST // atomic</code></p> 503 <h4>FLAT_ATOMIC_SWAP_X2</h4> 504 <p>Opcode: 80 (0x50) for GCN 1.0/1.1; 96 (0x60) for GCN 1.2<br /> 505 Syntax: FLAT_ATOMIC_SWAP_X2 VDST(2), VADDR(2), VDATA(2) 506 Description: Store VDATA 64-bit word into VADDR address. If GLC flag is set then 507 return previous value from VADDR address to VDST, otherwise keep old value from VDST. 508 Operation is atomic.<br /> 509 Operation:<br /> 510 <code>UINT64* VM = (UINT64*)VADDR 511 UINT64 P = *VM; *VM = VDATA; VDST = (GLC) ? P : VDST // atomic</code></p> 481 512 <h4>FLAT_LOAD_DWORD</h4> 482 513 <p>Opcode: 12 (0xc) for GCN 1.1; 20 (0x14) for GCN 1.2<br />