Changes

Jump to navigation Jump to search
227 bytes removed ,  15:20, 24 January 2015
Clean up and simplify
Line 291: Line 291:     
== Instructions ==
 
== Instructions ==
 +
 +
== Instructions ==
 +
Unless noted otherwise, SRC1 and SRC2 refer to their respectively indexed float[4] registers (after swizzling). Similarly, DST refers to its indexed register modulo destination component masking, i.e. an expression like DST=SRC1 might actually just set DST.y to SRC1.y.
 +
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 302: Line 306:  
|  1
 
|  1
 
|  ADD
 
|  ADD
|  Adds two vectors component by component; DST[i] = SRC1[i]+SRC2[i] for all i (modulo destination component masking)
+
|  Adds two vectors component by component; DST[i] = SRC1[i]+SRC2[i] for all i
 
|-
 
|-
 
|  0x01
 
|  0x01
Line 327: Line 331:  
|  1u
 
|  1u
 
|  EX2
 
|  EX2
|  Computes SRC1's exp component by component; DST[i] = EXP(SRC1[i]) for all i (modulo destination component masking) (base 2)
+
|  Computes SRC1's per-component exponent with base 2; DST[i] = EXP(SRC1[i]) for all i
 
|-
 
|-
 
|  0x06
 
|  0x06
 
|  1u
 
|  1u
 
|  LG2
 
|  LG2
|  Computes SRC1's log2 component by component; DST[i] = LOG2(SRC1[i]) for all i (modulo destination component masking) (base 2)
+
|  Computes SRC1's log2 component by component; DST[i] = LOG2(SRC1[i]) for all i
 
|-
 
|-
 
|  0x07
 
|  0x07
Line 342: Line 346:  
|  1
 
|  1
 
|  MUL
 
|  MUL
|  Multiplies two vectors component by component; DST[i] = SRC1[i].SRC2[i] for all i (modulo destination component masking)
+
|  Multiplies two vectors component by component; DST[i] = SRC1[i].SRC2[i] for all i
 
|-
 
|-
 
|  0x09
 
|  0x09
 
|  1
 
|  1
 
|  SGE
 
|  SGE
|  Sets output if SRC1 is greater than or equal to SRC2; DST[i] = (SRC1[i] >= SRC2[i]) ? 1.0 : 0.0 for all i (modulo destination component masking)
+
|  Sets output if SRC1 is greater than or equal to SRC2; DST[i] = (SRC1[i] >= SRC2[i]) ? 1.0 : 0.0 for all i
 
|-
 
|-
 
|  0x0A
 
|  0x0A
 
|  1
 
|  1
 
|  SLT
 
|  SLT
|  Sets output if SRC1 is strictly less than SRC2; DST[i] = (SRC1[i] < SRC2[i]) ? 1.0 : 0.0 for all i (modulo destination component masking)
+
|  Sets output if SRC1 is strictly less than SRC2; DST[i] = (SRC1[i] < SRC2[i]) ? 1.0 : 0.0 for all i
 
|-
 
|-
 
|  0x0B
 
|  0x0B
 
|  1u
 
|  1u
 
|  FLR
 
|  FLR
|  Computes SRC1's floor component by component; DST[i] = FLOOR(SRC1[i]) for all i (modulo destination component masking)
+
|  Computes SRC1's floor component by component; DST[i] = FLOOR(SRC1[i]) for all i
 
|-
 
|-
 
|  0x0C
 
|  0x0C
 
|  1
 
|  1
 
|  MAX
 
|  MAX
|  Takes the max of two vectors, component by component; DST[i] = MAX(SRC1[i], SRC2[i]) for all i (modulo destination component masking)
+
|  Takes the max of two vectors, component by component; DST[i] = MAX(SRC1[i], SRC2[i]) for all i
 
|-
 
|-
 
|  0x0D
 
|  0x0D
 
|  1
 
|  1
 
|  MIN
 
|  MIN
|  Takes the min of two vectors, component by component; DST[i] = MIN(SRC1[i], SRC2[i]) for all i (modulo destination component masking)
+
|  Takes the min of two vectors, component by component; DST[i] = MIN(SRC1[i], SRC2[i]) for all i
 
|-
 
|-
 
|  0x0E
 
|  0x0E
 
|  1u
 
|  1u
 
|  RCP
 
|  RCP
|  Computes the reciprocal of the vector, component by component; DST[i] = 1/SRC1[i] for all i (modulo destination component masking)
+
|  Computes the reciprocal of the vector, component by component; DST[i] = 1/SRC1[i] for all i
 
|-
 
|-
 
|  0x0F
 
|  0x0F
 
|  1u
 
|  1u
 
|  RSQ
 
|  RSQ
|  Computes the reciprocal of the square root of the vector, component by component; DST[i] = 1/sqrt(SRC1[i]) for all i (modulo destination component masking)
+
|  Computes the reciprocal of the square root of the vector, component by component; DST[i] = 1/sqrt(SRC1[i]) for all i
 
|-
 
|-
 
| 0x10
 
| 0x10
Line 392: Line 396:  
|  1u
 
|  1u
 
|  MOVA
 
|  MOVA
|  Move to address register; Casts the float uniform given by SRC1 to an integer (truncating the fractional part) and assigns the result to (a0.x, a0.y, _, _) (modulo destination component masking).
+
|  Move to address register; Casts the float uniform given by SRC1 to an integer (truncating the fractional part) and assigns the result to (a0.x, a0.y, _, _), respecting the destination component mask.
 
|-
 
|-
 
|  0x13
 
|  0x13
Line 432: Line 436:  
|  1i
 
|  1i
 
|  SGEI
 
|  SGEI
|  Sets output if SRC1 is greater than or equal to SRC2; DST[i] = (SRC1[i] >= SRC2[i]) ? 1.0 : 0.0 for all i (modulo destination component masking)
+
|  Sets output if SRC1 is greater than or equal to SRC2; DST[i] = (SRC1[i] >= SRC2[i]) ? 1.0 : 0.0 for all i
 
|-
 
|-
 
|  0x1B
 
|  0x1B
 
|  1i
 
|  1i
 
|  SLTI
 
|  SLTI
|  Sets output if SRC1 is strictly less than SRC2; DST[i] = (SRC1[i] < SRC2[i]) ? 1.0 : 0.0 for all i (modulo destination component masking)
+
|  Sets output if SRC1 is strictly less than SRC2; DST[i] = (SRC1[i] < SRC2[i]) ? 1.0 : 0.0 for all i
 
|-
 
|-
 
|  0x1C
 
|  0x1C
Line 532: Line 536:  
|  1c
 
|  1c
 
|  CMP
 
|  CMP
|  Sets booleans cmp.x and cmp.y based on the operand's x and y components and the CMPX and CMPY comparison operators respectively. See [[#Comparison_operator|below]] for details about operators.
+
|  Sets booleans cmp.x and cmp.y based on the operand's x and y components and the CMPX and CMPY comparison operators respectively. See [[#Comparison_operator|below]] for details about operators. It's unknown whether CMP respects the destination component mask or not.
 
|-
 
|-
 
|  0x30-0x37
 
|  0x30-0x37
 
|  5i
 
|  5i
 
|  MADI
 
|  MADI
|  Multiplies two vectors and adds a third one component by component; DST[i] = SRC3[i] + SRC2[i].SRC1[i] for all i (modulo destination component masking)
+
|  Multiplies two vectors and adds a third one component by component; DST[i] = SRC3[i] + SRC2[i].SRC1[i] for all i
 
|-
 
|-
 
|  0x38-0x3F
 
|  0x38-0x3F
 
|  5
 
|  5
 
|  MAD
 
|  MAD
|  Multiplies two vectors and adds a third one component by component; DST[i] = SRC3[i] + SRC2[i].SRC1[i] for all i (modulo destination component masking)
+
|  Multiplies two vectors and adds a third one component by component; DST[i] = SRC3[i] + SRC2[i].SRC1[i] for all i
 
|}
 
|}
  
549

edits

Navigation menu