Changes between Version 6 and Version 7 of GcnInstrsVop1


Ignore:
Timestamp:
11/28/15 18:00:28 (8 years ago)
Author:
trac
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • GcnInstrsVop1

    v6 v7  
    10721072<h3>Instruction set</h3>
    10731073<p>Alphabetically sorted instruction list:</p>
     1074<h4>V_CEIL_F32</h4>
     1075<p>Opcode VOP1: 34 (0x22) for GCN 1.0/1.1; 29 (0x1d) for GCN 1.2<br />
     1076Opcode VOP3A: 418 (0x1a2) for GCN 1.0/1.1; 349 (0x15d) for GCN 1.2<br />
     1077Syntax: V_CEIL_F32 VDST, SRC0<br />
     1078Description: Truncate floating point valu from SRC0 with rounding to positive infinity
     1079(ceilling), and store result to VDST. Implemented by flooring.
     1080If SRC0 is infinity or NaN then copy SRC0 to VDST.<br />
     1081Operation:
     1082<code>FLOAT F = FLOOR(ASFLOAT(SRC0))
     1083if (ASFLOAT(SRC0) &gt; 0.0 &amp;&amp; ASFLOAT(SRC0) != F)
     1084    F += 1.0
     1085VDST = F</code></p>
    10741086<h4>V_CVT_F16_F32</h4>
    10751087<p>Opcode VOP1: 10 (0xa)<br />
     
    11571169Operation:<br />
    11581170<code>VDST = (DOUBLE)(INT32)SRC0</code></p>
     1171<h4>V_CVT_F64_U32</h4>
     1172<p>Opcode VOP1: 22 (0x16)<br />
     1173Opcode VOP3A: 406 (0x196) for GCN 1.0/1.1; 342 (0x156) for GCN 1.2<br />
     1174Syntax: V_CVT_F64_U32 VDST(2), SRC0<br />
     1175Description: Convert unsigned 32-bit integer to double FP value, and store it to VDST.<br />
     1176Operation:<br />
     1177<code>VDST = (DOUBLE)SRC0</code></p>
    11591178<h4>V_CVT_FLR_I32_F32</h4>
    11601179<p>Opcode VOP1: 13 (0xd)<br />
     
    11661185If input value is NaN/-NaN then store MAX_INT32/MIN_INT32 to VDST.<br />
    11671186Operation:<br />
    1168 <code>if (ABS(SRC0)!=NAN)
    1169     VDST = (INT32)MAX(MIN(FLOOR(ASFLOAT(SRC0)), 2147483647.0), -2147483648.0)
     1187<code>FLOAT SF = ASFLOAT(SF)
     1188if (ABS(SF)!=NAN)
     1189    VDST = (INT32)MAX(MIN(FLOOR(SF), 2147483647.0), -2147483648.0)
    11701190else
    1171     VDST = (INT32)SRC0&gt;=0 ? 2147483647 : -2147483648</code></p>
     1191    VDST = (INT32)SF&gt;=0 ? 2147483647 : -2147483648</code></p>
    11721192<h4>V_CVT_I32_F32</h4>
    11731193<p>Opcode VOP1: 8 (0x8)<br />
     
    11801200Operation:<br />
    11811201<code>VDST = 0
    1182 if (SRC0!=NAN)
     1202if (ABS(ASFLOAT(SRC0))!=NAN)
    11831203    VDST = (INT32)MAX(MIN(RNDTZINT(ASFLOAT(SRC0)), 2147483647.0), -2147483648.0)</code></p>
    11841204<h4>V_CVT_I32_F64</h4>
     
    11921212Operation:<br />
    11931213<code>VDST = 0
    1194 if (SRC0!=NAN)
     1214if (ABS(ASDOUBLE(SRC0))!=NAN)
    11951215    VDST = (INT32)MAX(MIN(RNDTZINT(ASDOUBLE(SRC0)), 2147483647.0), -2147483648.0)</code></p>
    11961216<h4>V_CVT_OFF_F32_I4</h4>
     
    12111231If input value is NaN/-NaN then store MAX_INT32/MIN_INT32 to VDST.<br />
    12121232Description:<br />
    1213 <code>if (ABS(SRC0)!=NAN)
    1214     VDST = (INT32)MAX(MIN(FLOOR(ASFLOAT(SRC0) + 0.5), 2147483647.0), -2147483648.0)
     1233<code>FLOAT SF = ASFLOAT(SRC0)
     1234if (ABS(SF)!=NAN)
     1235    VDST = (INT32)MAX(MIN(FLOOR(SF + 0.5), 2147483647.0), -2147483648.0)
    12151236else
    1216     VDST = (INT32)SRC0&gt;=0 ? 2147483647 : -2147483648</code></p>
     1237    VDST = (INT32)SF&gt;=0 ? 2147483647 : -2147483648</code></p>
    12171238<h4>V_CVT_U32_F32</h4>
    12181239<p>Opcode VOP1: 7 (0x7)<br />
     
    12251246Operation:<br />
    12261247<code>VDST = 0
    1227 if (SRC0!=NAN)
     1248if (ABS(ASFLOAT(SRC0))!=NAN)
    12281249    VDST = (UINT32)MIN(RNDTZINT(ASFLOAT(SRC0)), 4294967295.0)</code></p>
     1250<h4>V_CVT_U32_F64</h4>
     1251<p>Opcode VOP1: 21 (0x15)<br />
     1252Opcode VOP3A: 405 (0x195) for GCN 1.0/1.1; 341 (0x155) for GCN 1.2<br />
     1253Syntax: V_CVT_U32_F64 VDST, SRC0(2)<br />
     1254Description: Convert 64-bit floating point value from SRC0 to unsigned 32-bit integer, and
     1255store result to VDST. Conversion uses rounding to zero. If value is higher than
     1256maximal integer then store MAX_UINT32 to VDST.
     1257If input value is NaN then store 0 to VDST.<br />
     1258Operation:<br />
     1259<code>VDST = 0
     1260if (ABS(ASDOUBLE(SRC0))!=NAN)
     1261    VDST = (UINT32)MIN(RNDTZINT(ASDOUBLE(SRC0)), 4294967295.0)</code></p>
     1262<h4>V_FLOOR_F32</h4>
     1263<p>Opcode VOP1: 37 (0x25) for GCN 1.0/1.1; 31 (0x1f) for GCN 1.2<br />
     1264Opcode VOP3A: 421 (0x1a5) for GCN 1.0/1.1; 351 (0x15f) for GCN 1.2<br />
     1265Syntax: V_FLOOR_F32 VDST, SRC0<br />
     1266Description: Truncate floating point valu from SRC0 with rounding to positive infinity
     1267(flooring), and store result to VDST. If SRC0 is infinity or NaN then copy SRC0 to VDST.<br />
     1268Operation:
     1269<code>VDST = FLOOR(ASFLOAT(SRC0))</code></p>
     1270<h4>V_FRACT_F32</h4>
     1271<p>Opcode VOP1: 32 (0x20) for GCN 1.0/1.1; 27 (0x1b) for GCN 1.2<br />
     1272Opcode VOP3A: 416 (0x1a0) for GCN 1.0/1.1; 347 (0x15b) for GCN 1.2<br />
     1273Syntax: V_FRACT VDST, SRC0<br />
     1274Description: Get fractional from floating point value SRC0 and store it to VDST.
     1275Fractional will be computed by subtracting floor(SRC0) from SRC0.
     1276If SRC0 is infinity or NaN then NaN with proper sign is stored to VDST.<br />
     1277Operation:<br />
     1278<code>FLOAT SF = ASFLOAT(SRC0)
     1279if (ABS(SF)!=NAN &amp;&amp; SF!=-INF &amp;&amp; SF!=INF)
     1280    VDST = SF - FLOOR(ASFLOAT(SF))
     1281else
     1282    VDST = NAN * SIGN(SF)</code></p>
    12291283<h4>V_MOV_FED_B32</h4>
    12301284<p>Opcode VOP1: 9 (0x9)<br />
     
    12571311    { firstlane = i; break; }
    12581312SDST = VSRC0[firstlane]</code></p>
     1313<h4>V_RNDNE_F32</h4>
     1314<p>Opcode VOP1: 35 (0x23) for GCN 1.0/1.1; 30 (0x1e) for GCN 1.2<br />
     1315Opcode VOP3A: 420 (0x1a4) for GCN 1.0/1.1; 350 (0x15e) for GCN 1.2<br />
     1316Syntax: V_RNDNE_F32 VDST, SRC0<br />
     1317Description: Round floating point value SRC0 to nearest even integer, and store result to
     1318VDST. If SRC0 is infinity or NaN then copy SRC0 to VDST.<br />
     1319Operation:
     1320<code>VDST = RNDNE(ASFLOAT(SRC0))</code></p>
     1321<h4>V_TRUNC_F32</h4>
     1322<p>Opcode VOP1: 33 (0x21) for GCN 1.0/1.1; 28 (0x1c) for GCN 1.2<br />
     1323Opcode VOP3A: 417 (0x1a1) for GCN 1.0/1.1; 348 (0x15c) for GCN 1.2<br />
     1324Syntax: V_TRUNC_F32 VDST, SRC0<br />
     1325Description: Get integer value from floating point value SRC0, and store (as float)
     1326it to VDST. If SRC0 is infinity or NaN then copy SRC0 to VDST.<br />
     1327Operation:<br />
     1328<code>VDST = RNDTZ(ASFLOAT(SRC0))</code></p>
    12591329}}}