[Mesa-dev] [PATCH 2/5] gallium: document breakc and switch/case/default/endswitch

sroland at vmware.com sroland at vmware.com
Thu Apr 18 19:13:55 PDT 2013


From: Roland Scheidegger <sroland at vmware.com>

docs were missing, especially the opcode-from-hell switch however is anything
but obvious.
---
 src/gallium/docs/source/tgsi.rst |   57 ++++++++++++++++++++++++++++++++++----
 1 file changed, 51 insertions(+), 6 deletions(-)

diff --git a/src/gallium/docs/source/tgsi.rst b/src/gallium/docs/source/tgsi.rst
index b7180f8..b46347e 100644
--- a/src/gallium/docs/source/tgsi.rst
+++ b/src/gallium/docs/source/tgsi.rst
@@ -861,7 +861,18 @@ This instruction replicates its result.
 
 .. opcode:: BRK - Break
 
-  TBD
+  Unconditionally moves the point of execution to the instruction after the
+  next endloop or endswitch. The instruction must appear within a loop/endloop
+  or switch/endswitch.
+
+
+.. opcode:: BREAKC - Break Conditional
+
+  Conditionally moves the point of execution to the instruction after the
+  next endloop or endswitch. The instruction must appear within a loop/endloop
+  or switch/endswitch.
+  Condition evaluates to true if src0.x != 0 where src0.x is interpreted
+  as an integer register.
 
 
 .. opcode:: IF - Float If
@@ -892,6 +903,45 @@ This instruction replicates its result.
   Ends an IF or UIF block.
 
 
+.. opcode:: SWITCH - Switch
+
+   Starts a c-style switch expression. The switch consists of one or multiple
+   CASE statements, and at most one DEFAULT statement. Execution of a statement
+   ends when a BRK is hit, but just like in C falling through to other cases
+   without a break is allowed. Similarly, DEFAULT label is allowed anywhere not
+   just as last statement, and fallthrough is allowed into/from it.
+   CASE src arguments are evaulated at bit level against the SWITCH src argument.
+
+   Example:
+   SWITCH src[0].x
+   CASE src[0].x
+   (some instructions here)
+   (optional BRK here)
+   DEFAULT
+   (some instructions here)
+   (optional BRK here)
+   CASE src[0].x
+   (some instructions here)
+   (optional BRK here)
+   ENDSWITCH
+
+
+.. opcode:: CASE - Switch case
+
+   This represents a switch case label. The src arg must be an integer immediate.
+
+
+.. opcode:: DEFAULT - Switch default
+
+   This represents the default case in the switch, which is taken if no other
+   case matches.
+
+
+.. opcode:: ENDSWITCH - End of switch
+
+   Ends a switch expression.
+
+
 .. opcode:: PUSHA - Push Address Register On Stack
 
   push(src.x)
@@ -1210,11 +1260,6 @@ XXX wait what
 
   TBD
 
-
-.. opcode:: BREAKC - Break Conditional
-
-  TBD
-
 .. _doubleopcodes:
 
 Double ISA
-- 
1.7.9.5


More information about the mesa-dev mailing list