Changes between Version 12 and Version 13 of GcnInstrsVop2
- Timestamp:
- 11/23/15 00:00:17 (8 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
GcnInstrsVop2
v12 v13 618 618 <code>UINT8 byte = ((SRC1&3) * 8) 619 619 UINT32 mask = 0xff << byte 620 FLOAT f = RNDINT(ASFLOAT(SRC0)) 620 621 UINT8 VAL8 = 0 621 FLOAT f = RNDINT(ASFLOAT(SRC0)) 622 if (f > 255.0) 623 VAL8 = 255 624 else if (f < 0.0 || f == NaN) 625 VAL8 = 0 626 else 627 VAL8 = f 622 if (f == NaN) 623 VAL8 = (UINT8)MAX(MIN(f, 255.0), 0.0) 628 624 VDST = (VDST&~mask) | (((UINT32)VAL8) << byte)</code></p> 629 625 <h4>V_CVT_PKNORM_I16_F32</h4> … … 638 634 { 639 635 FLOAT f = RNDNEINT(S*32767) 640 if (f > 32767.0) 641 return 0x7fff 642 else if (f < -32767.0) 643 return -0x7fff 644 else if (f == NaN) 636 if (f == NaN) 645 637 return 0 646 return (INT16) f638 return (INT16)MAX(MIN(f, 32767.0), -32767.0) 647 639 } 648 640 VDST = roundNorm(ASFLOAT(SRC0)) | ((UINT32)roundNorm(ASFLOAT(SRC1)) << 16)</code></p> … … 658 650 { 659 651 FLOAT f = RNDNEINT(S*65535.0) 660 INT16 VAL16 = 0 661 if (f > 65535.0) 662 return 0x7fff 663 else if (f < 0.0 || f == NaN) 652 if (f == NaN) 664 653 return 0 665 return ( UINT16)f654 return (INT16)MAX(MIN(f, 65535.0), 0.0) 666 655 } 667 656 VDST = roundNorm(ASFLOAT(SRC0)) | ((UINT32)roundNorm(ASFLOAT(SRC1)) << 16)</code></p> … … 704 693 SRC1 is signed integer, SRC0 is floating point value.<br /> 705 694 Operation:<br /> 706 <code>VDST = ASFLOAT(SRC0) * POW(2.0, SRC1)</code></p>695 <code>VDST = ASFLOAT(SRC0) * POW(2.0, (INT32)SRC1)</code></p> 707 696 <h4>V_LSHL_B32</h4> 708 697 <p>Opcode VOP2: 25 (0x19) for GCN 1.0/1.1<br />