| 974 | <h4>V_MAX3_F32</h4> |
| 975 | <p>Opcode: 340 (0x154) for GCN 1.0/1.1; 467 (0x1d3) for GCN 1.2<br /> |
| 976 | Syntax: V_MAX3_F32 VDST, SRC0, SRC1, SRC2<br /> |
| 977 | Description: Choose largest value from FP values SRC0, SRC1, SRC2, and store it to VDST.<br /> |
| 978 | Operation:<br /> |
| 979 | <code>FLOAT SF0 = ASFLOAT(SRC0) |
| 980 | FLOAT SF1 = ASFLOAT(SRC1) |
| 981 | FLOAT SF2 = ASFLOAT(SRC2) |
| 982 | if (ISNAN(SF0)) |
| 983 | VDST = MAX(SF1, SF2) |
| 984 | else if (ISNAN(SF1)) |
| 985 | VDST = MAX(SF0, SF2) |
| 986 | else if (ISNAN(SF2)) |
| 987 | VDST = MAX(SF0, SF1) |
| 988 | else if (SF2 > SF0 && SF2 > SF1) |
| 989 | VDST = SF2 |
| 990 | else |
| 991 | VDST = MAX(SF1, SF0)</code></p> |
| 992 | <h4>V_MAX3_I32</h4> |
| 993 | <p>Opcode: 341 (0x155) for GCN 1.0/1.1; 468 (0x1d4) for GCN 1.2<br /> |
| 994 | Syntax: V_MAX3_I32 VDST, SRC0, SRC1, SRC2<br /> |
| 995 | Description: Choose largest value from signed integer values SRC0, SRC1, SRC2, |
| 996 | and store it to VDST.<br /> |
| 997 | Operation:<br /> |
| 998 | <code>if ((INT32)SRC2 > (INT32)SRC0 && (INT32)SRC2 > (INT32)SRC1) |
| 999 | VDST = SRC2 |
| 1000 | else |
| 1001 | VDST = MAX((INT32)SRC1, (INT32)SRC0)</code></p> |
| 1002 | <h4>V_MAX3_U32</h4> |
| 1003 | <p>Opcode: 342 (0x156) for GCN 1.0/1.1; 469 (0x1d5) for GCN 1.2<br /> |
| 1004 | Syntax: V_MAX3_U32 VDST, SRC0, SRC1, SRC2<br /> |
| 1005 | Description: Choose largest value from unsigned integer values SRC0, SRC1, SRC2, |
| 1006 | and store it to VDST.<br /> |
| 1007 | Operation:<br /> |
| 1008 | <code>if (SRC2 > SRC0 && SRC2 > SRC1) |
| 1009 | VDST = SRC2 |
| 1010 | else |
| 1011 | VDST = MAX(SRC1, SRC0)</code></p> |
| 1012 | <h4>V_MED3_F32</h4> |
| 1013 | <p>Opcode: 343 (0x157) for GCN 1.0/1.1; 470 (0x1d6) for GCN 1.2<br /> |
| 1014 | Syntax: V_MED3_F32 VDST, SRC0, SRC1, SRC2<br /> |
| 1015 | Description: Choose medium value from FP values SRC0, SRC1, SRC2, and store it to VDST.<br /> |
| 1016 | Operation:<br /> |
| 1017 | <code>FLOAT SF0 = ASFLOAT(SRC0) |
| 1018 | FLOAT SF1 = ASFLOAT(SRC1) |
| 1019 | FLOAT SF2 = ASFLOAT(SRC2) |
| 1020 | if (ISNAN(SF0)) |
| 1021 | VDST = MIN(SF1, SF2) |
| 1022 | else if (ISNAN(SF1)) |
| 1023 | VDST = MIN(SF0, SF2) |
| 1024 | else if (ISNAN(SF2)) |
| 1025 | VDST = MIN(SF0, SF1) |
| 1026 | else if ((SF2 > SF1 && SF2 < SF0) || (SF2 < SF1 && SF2 > SF0)) |
| 1027 | VDST = SF2 |
| 1028 | else if ((SF1 > SF2 && SF1 < SF0) || (SF1 < SF2 && SF1 > SF0)) |
| 1029 | VDST = SF1 |
| 1030 | else |
| 1031 | VDST = SF0</code></p> |
| 1032 | <h4>V_MED3_I32</h4> |
| 1033 | <p>Opcode: 344 (0x158) for GCN 1.0/1.1; 471 (0x1d7) for GCN 1.2<br /> |
| 1034 | Syntax: V_MED3_I32 VDST, SRC0, SRC1, SRC2<br /> |
| 1035 | Description: Choose medium value from signed integer values SRC0, SRC1, SRC2, |
| 1036 | and store it to VDST.<br /> |
| 1037 | Operation:<br /> |
| 1038 | <code>INT32 S0 = (INT32)SRC0 |
| 1039 | INT32 S1 = (INT32)SRC1 |
| 1040 | INT32 S2 = (INT32)SRC2 |
| 1041 | if ((S2 > S1 && S2 < S0) || (S2 < S1 && S2 > S0)) |
| 1042 | VDST = S2 |
| 1043 | else if ((S1 > S2 && S1 < S0) || (S1 < S2 && S1 > S0)) |
| 1044 | VDST = S1 |
| 1045 | else |
| 1046 | VDST = S0</code></p> |
| 1047 | <h4>V_MED3_U32</h4> |
| 1048 | <p>Opcode: 345 (0x159) for GCN 1.0/1.1; 472 (0x1d8) for GCN 1.2<br /> |
| 1049 | Syntax: V_MED3_U32 VDST, SRC0, SRC1, SRC2<br /> |
| 1050 | Description: Choose medium value from unsigned integer values SRC0, SRC1, SRC2, |
| 1051 | and store it to VDST.<br /> |
| 1052 | Operation:<br /> |
| 1053 | <code>if ((SRC2 > SRC1 && SRC2 < SRC0) || (SRC2 < SRC1 && SRC2 > SRC0)) |
| 1054 | VDST = SRC2 |
| 1055 | else if ((SRC1 > SRC2 && SRC1 < SRC0) || (SRC1 < SRC2 && SRC1 > SRC0)) |
| 1056 | VDST = SRC1 |
| 1057 | else |
| 1058 | VDST = SRC0</code></p> |
979 | | <code>VDST = MIN3(ASFLOAT(SRC0), ASFLOAT(SRC1), ASFLOAT(SRC2))</code></p> |
| 1064 | <code>FLOAT SF0 = ASFLOAT(SRC0) |
| 1065 | FLOAT SF1 = ASFLOAT(SRC1) |
| 1066 | FLOAT SF2 = ASFLOAT(SRC2) |
| 1067 | if (ISNAN(SF0)) |
| 1068 | VDST = MIN(SF1, SF2) |
| 1069 | else if (ISNAN(SF1)) |
| 1070 | VDST = MIN(SF0, SF2) |
| 1071 | else if (ISNAN(SF2)) |
| 1072 | VDST = MIN(SF0, SF1) |
| 1073 | else if (SF2 < SF0 && SF2 < SF1) |
| 1074 | VDST = SF2 |
| 1075 | else |
| 1076 | VDST = MIN(SF1, SF0)</code></p> |
| 1077 | <h4>V_MIN3_I32</h4> |
| 1078 | <p>Opcode: 338 (0x152) for GCN 1.0/1.1; 465 (0x1d1) for GCN 1.2<br /> |
| 1079 | Syntax: V_MIN3_I32 VDST, SRC0, SRC1, SRC2<br /> |
| 1080 | Description: Choose smallest value from signed integer values SRC0, SRC1, SRC2, |
| 1081 | and store it to VDST.<br /> |
| 1082 | Operation:<br /> |
| 1083 | <code>if ((INT32)SRC2 < (INT32)SRC0 && (INT32)SRC2 < (INT32)SRC1) |
| 1084 | VDST = SRC2 |
| 1085 | else |
| 1086 | VDST = MIN((INT32)SRC1, (INT32)SRC0)</code></p> |
| 1087 | <h4>V_MIN3_U32</h4> |
| 1088 | <p>Opcode: 339 (0x153) for GCN 1.0/1.1; 466 (0x1d2) for GCN 1.2<br /> |
| 1089 | Syntax: V_MIN3_U32 VDST, SRC0, SRC1, SRC2<br /> |
| 1090 | Description: Choose smallest value from unsigned integer values SRC0, SRC1, SRC2, |
| 1091 | and store it to VDST.<br /> |
| 1092 | Operation:<br /> |
| 1093 | <code>if (SRC2 < SRC0 && SRC2 < SRC1) |
| 1094 | VDST = SRC2 |
| 1095 | else |
| 1096 | VDST = MIN(SRC1, SRC0)</code></p> |