File: DIV.md

package info (click to toggle)
intel-graphics-compiler2 2.16.0-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 106,644 kB
  • sloc: cpp: 805,640; lisp: 287,672; ansic: 16,414; python: 3,952; yacc: 2,588; lex: 1,666; pascal: 313; sh: 186; makefile: 35
file content (130 lines) | stat: -rw-r--r-- 2,918 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<!---======================= begin_copyright_notice ============================

Copyright (C) 2020-2022 Intel Corporation

SPDX-License-Identifier: MIT

============================= end_copyright_notice ==========================-->

## Opcode

  DIV = 0x03

## Format

| | | | | | |
| --- | --- | --- | --- | --- | --- |
| 0x03(DIV) | Exec_size | Pred | Dst | Src0 | Src1 |


## Semantics


```

                    for (i = 0; i < exec_size; ++i) {
                      if (ChEn[i]) {
                        dst[i] = src0[i] / src1[i];
                      }
                    }
```

## Description





```
    Divides <src0> by <src1> component-wise, and stores the result into <dst>.
```


- **Exec_size(ub):** Execution size

  - Bit[2..0]: size of the region for source and destination operands

    - 0b000:  1 element (scalar)
    - 0b001:  2 elements
    - 0b010:  4 elements
    - 0b011:  8 elements
    - 0b100:  16 elements
    - 0b101:  32 elements
  - Bit[7..4]: execution mask (explicit control over the enabled channels)

    - 0b0000:  M1
    - 0b0001:  M2
    - 0b0010:  M3
    - 0b0011:  M4
    - 0b0100:  M5
    - 0b0101:  M6
    - 0b0110:  M7
    - 0b0111:  M8
    - 0b1000:  M1_NM
    - 0b1001:  M2_NM
    - 0b1010:  M3_NM
    - 0b1011:  M4_NM
    - 0b1100:  M5_NM
    - 0b1101:  M6_NM
    - 0b1110:  M7_NM
    - 0b1111:  M8_NM

- **Pred(uw):** Predication control


- **Dst(vec_operand):** The destination operand. Operand class: general,indirect


- **Src0(vec_operand):** The first source operand. Operand class: general,indirect,immediate


- **Src1(vec_operand):** The second source operand. Operand class: general,indirect,immediate


#### Properties
- **Supported Types:** B,D,DF,F,HF,UB,UD,UW,W
- **Saturation:** Only when type is float
- **Source Modifier:** arithmetic


#### Operand type maps
- **Type map**
  -  **Dst types:** DF
  -  **Src types:** DF
- **Type map**
  -  **Dst types:** F, HF
  -  **Src types:** F, HF
- **Type map**
  -  **Dst types:** UD, D, UW, W, UB, B
  -  **Src types:** UD, D, UW, W, UB, B


## Text
```
[(<P>)] DIV[.sat] (<exec_size>) <dst> <src0> <src1>
```

## Notes





```


Integer divide with signed inputs follow the rules below for the signs of the quotient and remainder.

  +------------+------------------+-----+-----+-----+-----+
  | Inputs:    |   Numerator      | \+  | \+  | \-  | \-  |
  +------------+------------------+-----+-----+-----+-----+
  |            |   Denominator    | \+  | \-  | \+  | \-  |
  +------------+------------------+-----+-----+-----+-----+
  | Outputs:   |   Quotient       | \+  | \-  | \-  | \+  |
  +------------+------------------+-----+-----+-----+-----+
  |            |   Remainder      | \+  | \+  | \-  | \-  |
  +------------+------------------+-----+-----+-----+-----+

Floating point divide (x/y) is implemented as x * INV(y).  DIVM provides the IEEE-conforming correctly rounded results.
```