OSDN Git Service

New opcodes for integer operations
authorAlexis Hetu <sugoi@google.com>
Tue, 18 Aug 2015 19:54:07 +0000 (15:54 -0400)
committerAlexis Hétu <sugoi@google.com>
Fri, 28 Aug 2015 15:39:22 +0000 (15:39 +0000)
Opcodes for soon to be added integer operations such as:
- Conversions to/from float
- Negate
- Comparison
- Add, Sub, Mul, Div, Mod
- Left Shift, Right Shift
- Min, Max

Change-Id: I16af0423fdb210a558ad293e0e043176bde1c9ee
Reviewed-on: https://swiftshader-review.googlesource.com/3889
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
src/Shader/Shader.cpp
src/Shader/Shader.hpp

index 3be4a34..6dad7f3 100644 (file)
@@ -735,12 +735,22 @@ namespace sw
                case OPCODE_NOP:                        return "nop";
                case OPCODE_MOV:                        return "mov";
                case OPCODE_ADD:                        return "add";
+               case OPCODE_IADD:                       return "iadd";
                case OPCODE_SUB:                        return "sub";
+               case OPCODE_ISUB:                       return "isub";
                case OPCODE_MAD:                        return "mad";
                case OPCODE_MUL:                        return "mul";
+               case OPCODE_IMUL:                       return "imul";
                case OPCODE_RCPX:                       return "rcpx";
                case OPCODE_DIV:                        return "div";
+               case OPCODE_IDIV:                       return "idiv";
+               case OPCODE_UDIV:                       return "udiv";
                case OPCODE_MOD:                        return "mod";
+               case OPCODE_IMOD:                       return "imod";
+               case OPCODE_UMOD:                       return "umod";
+               case OPCODE_SHL:                        return "shl";
+               case OPCODE_ISHR:                       return "ishr";
+               case OPCODE_USHR:                       return "ushr";
                case OPCODE_RSQX:                       return "rsqx";
                case OPCODE_SQRT:                       return "sqrt";
                case OPCODE_RSQ:                        return "rsq";
@@ -754,7 +764,11 @@ namespace sw
                case OPCODE_DP3:                        return "dp3";
                case OPCODE_DP4:                        return "dp4";
                case OPCODE_MIN:                        return "min";
+               case OPCODE_IMIN:                       return "imin";
+               case OPCODE_UMIN:                       return "umin";
                case OPCODE_MAX:                        return "max";
+               case OPCODE_IMAX:                       return "imax";
+               case OPCODE_UMAX:                       return "umax";
                case OPCODE_SLT:                        return "slt";
                case OPCODE_SGE:                        return "sge";
                case OPCODE_EXP2X:                      return "exp2x";
@@ -835,6 +849,7 @@ namespace sw
                case OPCODE_TEXDEPTH:           return "texdepth";
                case OPCODE_CMP0:                       return "cmp0";
                case OPCODE_ICMP:                       return "icmp";
+               case OPCODE_UCMP:                       return "ucmp";
                case OPCODE_SELECT:                     return "select";
                case OPCODE_EXTRACT:            return "extract";
                case OPCODE_INSERT:                     return "insert";
@@ -894,8 +909,14 @@ namespace sw
                case OPCODE_POW:            return "pow";
                case OPCODE_F2B:            return "f2b";
                case OPCODE_B2F:            return "b2f";
+               case OPCODE_F2I:            return "f2i";
+               case OPCODE_I2F:            return "i2f";
+               case OPCODE_F2U:            return "f2u";
+               case OPCODE_U2F:            return "u2f";
                case OPCODE_ALL:            return "all";
                case OPCODE_ANY:            return "any";
+               case OPCODE_NEG:            return "neg";
+               case OPCODE_INEG:           return "ineg";
                case OPCODE_ISNAN:          return "isnan";
                case OPCODE_ISINF:          return "isinf";
                case OPCODE_NOT:            return "not";
index 044ae4c..5c576a5 100644 (file)
@@ -180,8 +180,13 @@ namespace sw
                        OPCODE_POW,\r
                        OPCODE_F2B,   // Float to bool\r
                        OPCODE_B2F,   // Bool to float\r
+                       OPCODE_F2I,   // Float to int\r
+                       OPCODE_I2F,   // Int to float\r
+                       OPCODE_F2U,   // Float to uint\r
+                       OPCODE_U2F,   // Uint to float\r
                        OPCODE_ALL,\r
                        OPCODE_ANY,\r
+                       OPCODE_NEG,\r
                        OPCODE_NOT,\r
                        OPCODE_OR,\r
                        OPCODE_XOR,\r
@@ -213,6 +218,7 @@ namespace sw
                        OPCODE_REFRACT3,\r
                        OPCODE_REFRACT4,\r
                        OPCODE_ICMP,\r
+                       OPCODE_UCMP,\r
                        OPCODE_SELECT,\r
                        OPCODE_EXTRACT,\r
                        OPCODE_INSERT,\r
@@ -221,6 +227,25 @@ namespace sw
                        OPCODE_LEAVE,   // Return before the end of the function\r
                        OPCODE_CONTINUE,\r
                        OPCODE_TEST,   // Marks the end of the code that can be skipped by 'continue'\r
+\r
+                       // Integer opcodes\r
+                       OPCODE_INEG,\r
+                       OPCODE_IADD,\r
+                       OPCODE_ISUB,\r
+                       OPCODE_IMUL,\r
+                       OPCODE_IDIV,\r
+                       OPCODE_IMOD,\r
+                       OPCODE_SHL,\r
+                       OPCODE_ISHR,\r
+                       OPCODE_IMIN,\r
+                       OPCODE_IMAX,\r
+\r
+                       // Unsigned integer opcodes\r
+                       OPCODE_UDIV,\r
+                       OPCODE_UMOD,\r
+                       OPCODE_USHR,\r
+                       OPCODE_UMIN,\r
+                       OPCODE_UMAX,\r
                };\r
 \r
                static Opcode OPCODE_DP(int);\r