| 1014 | <h4>V_ADD_I16</h4> |
| 1015 | <p>Opcode: 670 (0x29e) for GCN 1.4<br /> |
| 1016 | Syntax: V_ADD_I16 VDST, SRC0, SRC1<br /> |
| 1017 | Description: Add 16-bit signed value from SRC0 to 16-bit signed value from SRC1 and |
| 1018 | store result to VDST. If CLAMP modifier supplied, then result is saturated to |
| 1019 | 16-bit signed value.<br /> |
| 1020 | Operation:<br /> |
| 1021 | <code>UINT16 result = (SRC0&0xffff) + (SRC1&0xffff) |
| 1022 | if (CLAMP) |
| 1023 | { |
| 1024 | INT32 temp = SEXT32((INT16)SRC0&0xffff) + SEXT32((INT16)SRC1&0xffff) |
| 1025 | if (temp > ((1<<16)-1)) |
| 1026 | result = 0x7fff |
| 1027 | if temp < (-1<<16) |
| 1028 | result = 0x8000 |
| 1029 | } |
| 1030 | VDST = (VDST & 0xffff0000) | result</code></p> |
| 1031 | <h4>V_ADD_I32</h4> |
| 1032 | <p>Opcode: 668 (0x29c) for GCN 1.4<br /> |
| 1033 | Syntax: V_ADD_I32 VDST, SRC0, SRC1<br /> |
| 1034 | Description: Add signed value from SRC0 to signed value from SRC1 and store result to VDST. |
| 1035 | If CLAMP modifier supplied, then result is saturated to 32-bit signed value.<br /> |
| 1036 | Operation:<br /> |
| 1037 | <code>VDST = SRC0 + SRC1 |
| 1038 | if (CLAMP) |
| 1039 | { |
| 1040 | INT64 temp = SEXT64(SRC0) + SEXT64(SRC1) |
| 1041 | if (temp > ((1LL<<31)-1)) |
| 1042 | VDST = 0x7fffffff |
| 1043 | if temp < (-1LL<<31) |
| 1044 | VDST = 0x80000000 |
| 1045 | }</code></p> |
| 1985 | <h4>V_SUB_I16</h4> |
| 1986 | <p>Opcode: 671 (0x29f) for GCN 1.4<br /> |
| 1987 | Syntax: V_SUB_I16 VDST, SRC0, SRC1<br /> |
| 1988 | Description: Subtract 16-bit signed value from SRC1 from 16-bit signed value from SRC0 and |
| 1989 | store result to VDST. If CLAMP modifier supplied, then result is saturated to |
| 1990 | 16-bit signed value.<br /> |
| 1991 | Operation:<br /> |
| 1992 | <code>UINT16 result = (SRC0&0xffff) - (SRC1&0xffff) |
| 1993 | if (CLAMP) |
| 1994 | { |
| 1995 | INT32 temp = SEXT32((INT16)SRC0&0xffff) - SEXT32((INT16)SRC1&0xffff) |
| 1996 | if (temp > ((1<<16)-1)) |
| 1997 | result = 0x7fff |
| 1998 | if temp < (-1<<16) |
| 1999 | result = 0x8000 |
| 2000 | } |
| 2001 | VDST = (VDST & 0xffff0000) | result</code></p> |
| 2002 | <h4>V_SUB_I32</h4> |
| 2003 | <p>Opcode: 669 (0x29d) for GCN 1.4<br /> |
| 2004 | Syntax: V_SUB_I32 VDST, SRC0, SRC1<br /> |
| 2005 | Description: Subtract signed value from SRC1 from signed value from SRC0 and |
| 2006 | store result to VDST. If CLAMP modifier supplied, then result is saturated to |
| 2007 | 32-bit signed value.<br /> |
| 2008 | Operation:<br /> |
| 2009 | <code>VDST = SRC0 - SRC1 |
| 2010 | if (CLAMP) |
| 2011 | { |
| 2012 | INT64 temp = SEXT64(SRC0) - SEXT64(SRC1) |
| 2013 | if (temp > ((1LL<<31)-1)) |
| 2014 | VDST = 0x7fffffff |
| 2015 | if temp < (-1LL<<31) |
| 2016 | VDST = 0x80000000 |
| 2017 | }</code></p> |