Wed Jun 12 04:23:46 2013 UTC ()
fix serial type&pasto, while there add SX_ADD instructions


(macallan)
diff -r1.7 -r1.8 src/sys/arch/sparc/dev/sxreg.h

cvs diff -r1.7 -r1.8 src/sys/arch/sparc/dev/sxreg.h (switch to unified diff)

--- src/sys/arch/sparc/dev/sxreg.h 2013/06/05 18:15:06 1.7
+++ src/sys/arch/sparc/dev/sxreg.h 2013/06/12 04:23:46 1.8
@@ -1,255 +1,268 @@ @@ -1,255 +1,268 @@
1/* $NetBSD: sxreg.h,v 1.7 2013/06/05 18:15:06 macallan Exp $ */ 1/* $NetBSD: sxreg.h,v 1.8 2013/06/12 04:23:46 macallan Exp $ */
2 2
3/*- 3/*-
4 * Copyright (c) 2013 The NetBSD Foundation, Inc. 4 * Copyright (c) 2013 The NetBSD Foundation, Inc.
5 * All rights reserved. 5 * All rights reserved.
6 * 6 *
7 * This code is derived from software contributed to The NetBSD Foundation 7 * This code is derived from software contributed to The NetBSD Foundation
8 * by Michael Lorenz. 8 * by Michael Lorenz.
9 * 9 *
10 * Redistribution and use in source and binary forms, with or without 10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions 11 * modification, are permitted provided that the following conditions
12 * are met: 12 * are met:
13 * 1. Redistributions of source code must retain the above copyright 13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer. 14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright 15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the 16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution. 17 * documentation and/or other materials provided with the distribution.
18 * 18 *
19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE. 29 * POSSIBILITY OF SUCH DAMAGE.
30 */ 30 */
31 31
32/* register definitions for Sun's SX / SPAM rendering engine */ 32/* register definitions for Sun's SX / SPAM rendering engine */
33 33
34#ifndef SXREG_H 34#ifndef SXREG_H
35#define SXREG_H 35#define SXREG_H
36 36
37/* SX control registers */ 37/* SX control registers */
38#define SX_CONTROL_STATUS 0x00000000 38#define SX_CONTROL_STATUS 0x00000000
39#define SX_ERROR 0x00000004 39#define SX_ERROR 0x00000004
40#define SX_PAGE_BOUND_LOWER 0x00000008 40#define SX_PAGE_BOUND_LOWER 0x00000008
41#define SX_PAGE_BOUND_UPPER 0x0000000c 41#define SX_PAGE_BOUND_UPPER 0x0000000c
42#define SX_PLANEMASK 0x00000010 42#define SX_PLANEMASK 0x00000010
43#define SX_ROP_CONTROL 0x00000014 /* 8 bit ROP */ 43#define SX_ROP_CONTROL 0x00000014 /* 8 bit ROP */
44#define SX_IQ_OVERFLOW_COUNTER 0x00000018 44#define SX_IQ_OVERFLOW_COUNTER 0x00000018
45#define SX_DIAGNOSTICS 0x0000001c 45#define SX_DIAGNOSTICS 0x0000001c
46#define SX_INSTRUCTIONS 0x00000020 46#define SX_INSTRUCTIONS 0x00000020
47#define SX_ID 0x00000028 47#define SX_ID 0x00000028
48#define SX_R0_INIT 0x0000002c 48#define SX_R0_INIT 0x0000002c
49#define SX_SOFTRESET 0x00000030 49#define SX_SOFTRESET 0x00000030
50/* write registers directly, only when processor is stopped */ 50/* write registers directly, only when processor is stopped */
51#define SX_DIRECT_R0 0x00000100 51#define SX_DIRECT_R0 0x00000100
52#define SX_DIRECT_R1 0x00000104 /* and so on until R127 */ 52#define SX_DIRECT_R1 0x00000104 /* and so on until R127 */
53/* write registers via pseudo instructions */ 53/* write registers via pseudo instructions */
54#define SX_QUEUED_R0 0x00000300 54#define SX_QUEUED_R0 0x00000300
55#define SX_QUEUED_R1 0x00000304 /* and so on until R127 */ 55#define SX_QUEUED_R1 0x00000304 /* and so on until R127 */
56#define SX_QUEUED(r) (0x300 + (r << 2)) 56#define SX_QUEUED(r) (0x300 + (r << 2))
57 57
58/* special purpose registers */ 58/* special purpose registers */
59#define R_ZERO 0 59#define R_ZERO 0
60#define R_SCAM 1 60#define R_SCAM 1
61#define R_MASK 2 /* bitmask for SX_STORE_SELECT */ 61#define R_MASK 2 /* bitmask for SX_STORE_SELECT */
62 62
63/* 63/*
64 * registers are repeated at 0x1000 with certain parts read only 64 * registers are repeated at 0x1000 with certain parts read only
65 * ( like the PAGE_BOUND registers ) which userland has no business writing to 65 * ( like the PAGE_BOUND registers ) which userland has no business writing to
66 */ 66 */
67 67
68/* SX_CONTROL_STATUS */ 68/* SX_CONTROL_STATUS */
69#define SX_EE1 0x00000001 /* illegal instruction */ 69#define SX_EE1 0x00000001 /* illegal instruction */
70#define SX_EE2 0x00000002 /* page bound error */ 70#define SX_EE2 0x00000002 /* page bound error */
71#define SX_EE3 0x00000004 /* illegal memory access */ 71#define SX_EE3 0x00000004 /* illegal memory access */
72#define SX_EE4 0x00000008 /* illegal register access */ 72#define SX_EE4 0x00000008 /* illegal register access */
73#define SX_EE5 0x00000010 /* alignment violation */ 73#define SX_EE5 0x00000010 /* alignment violation */
74#define SX_EE6 0x00000020 /* illegal instruction queue write */ 74#define SX_EE6 0x00000020 /* illegal instruction queue write */
75#define SX_EI 0x00000080 /* interrupt on error */ 75#define SX_EI 0x00000080 /* interrupt on error */
76#define SX_PB 0x00001000 /* enable page bound checking */ 76#define SX_PB 0x00001000 /* enable page bound checking */
77#define SX_WO 0x00002000 /* write occured ( by SX ) */ 77#define SX_WO 0x00002000 /* write occured ( by SX ) */
78#define SX_GO 0x00004000 /* start/stop the processor */ 78#define SX_GO 0x00004000 /* start/stop the processor */
79#define SX_MT 0x00008000 /* instruction queue is empty */ 79#define SX_MT 0x00008000 /* instruction queue is empty */
80 80
81/* SX_ERROR */ 81/* SX_ERROR */
82#define SX_SE1 0x00000001 /* illegal instruction */ 82#define SX_SE1 0x00000001 /* illegal instruction */
83#define SX_SE2 0x00000002 /* page bound error */ 83#define SX_SE2 0x00000002 /* page bound error */
84#define SX_SE3 0x00000004 /* illegal memory access */ 84#define SX_SE3 0x00000004 /* illegal memory access */
85#define SX_SE4 0x00000008 /* illegal register access */ 85#define SX_SE4 0x00000008 /* illegal register access */
86#define SX_SE5 0x00000010 /* alignment violation */ 86#define SX_SE5 0x00000010 /* alignment violation */
87#define SX_SE6 0x00000020 /* illegal instruction queue write */ 87#define SX_SE6 0x00000020 /* illegal instruction queue write */
88#define SX_SI 0x00000080 /* interrupt on error */ 88#define SX_SI 0x00000080 /* interrupt on error */
89 89
90/* SX_ID */ 90/* SX_ID */
91#define SX_ARCHITECTURE_MASK 0x000000ff 91#define SX_ARCHITECTURE_MASK 0x000000ff
92#define SX_CHIP_REVISION 0x0000ff00 92#define SX_CHIP_REVISION 0x0000ff00
93 93
94/* SX_DIAGNOSTICS */ 94/* SX_DIAGNOSTICS */
95#define SX_IQ_FIFO_ACCESS 0x00000001 /* allow memory instructions 95#define SX_IQ_FIFO_ACCESS 0x00000001 /* allow memory instructions
96 * in SX_INSTRUCTIONS */ 96 * in SX_INSTRUCTIONS */
97 97
98/* 98/*
99 * memory referencing instructions are written to 0x800000000 + PA 99 * memory referencing instructions are written to 0x800000000 + PA
100 * so we have to go through ASI 0x28 ( ASI_BYPASS + 8 ) 100 * so we have to go through ASI 0x28 ( ASI_BYPASS + 8 )
101 */ 101 */
102#define ASI_SX 0x28 102#define ASI_SX 0x28
103 103
104/* load / store instructions */ 104/* load / store instructions */
105#define SX_STORE_COND (0x4 << 19) /* conditional write with mask */ 105#define SX_STORE_COND (0x4 << 19) /* conditional write with mask */
106#define SX_STORE_CLAMP (0x2 << 19) 106#define SX_STORE_CLAMP (0x2 << 19)
107#define SX_STORE_MASK (0x1 << 19) /* apply plane mask */ 107#define SX_STORE_MASK (0x1 << 19) /* apply plane mask */
108#define SX_STORE_SELECT (0x8 << 19) /* expand with plane reg dest[0]/dest[1] */ 108#define SX_STORE_SELECT (0x8 << 19) /* expand with plane reg dest[0]/dest[1] */
109#define SX_LOAD (0xa << 19) 109#define SX_LOAD (0xa << 19)
110#define SX_STORE (0x0 << 19) 110#define SX_STORE (0x0 << 19)
111 111
112/* data type */ 112/* data type */
113#define SX_UBYTE_0 (0x00 << 14) 113#define SX_UBYTE_0 (0x00 << 14)
114#define SX_UBYTE_8 (0x01 << 14) 114#define SX_UBYTE_8 (0x01 << 14)
115#define SX_UBYTE_16 (0x02 << 14) 115#define SX_UBYTE_16 (0x02 << 14)
116#define SX_UBYTE_24 (0x03 << 14) 116#define SX_UBYTE_24 (0x03 << 14)
117#define SX_SBYTE_0 (0x04 << 14) 117#define SX_SBYTE_0 (0x04 << 14)
118#define SX_SBYTE_8 (0x05 << 14) 118#define SX_SBYTE_8 (0x05 << 14)
119#define SX_SBYTE_16 (0x06 << 14) 119#define SX_SBYTE_16 (0x06 << 14)
120#define SX_SBYTE_24 (0x07 << 14) 120#define SX_SBYTE_24 (0x07 << 14)
121#define SX_UQUAD_0 (0x08 << 14) 121#define SX_UQUAD_0 (0x08 << 14)
122#define SX_UQUAD_8 (0x09 << 14) 122#define SX_UQUAD_8 (0x09 << 14)
123#define SX_UQUAD_16 (0x0a << 14) 123#define SX_UQUAD_16 (0x0a << 14)
124#define SX_UQUAD_24 (0x0b << 14) 124#define SX_UQUAD_24 (0x0b << 14)
125#define SX_SQUAD_0 (0x0c << 14) 125#define SX_SQUAD_0 (0x0c << 14)
126#define SX_SQUAD_8 (0x0d << 14) 126#define SX_SQUAD_8 (0x0d << 14)
127#define SX_SQUAD_16 (0x0e << 14) 127#define SX_SQUAD_16 (0x0e << 14)
128#define SX_SQUAD_24 (0x0f << 14) 128#define SX_SQUAD_24 (0x0f << 14)
129#define SX_UCHAN_0 (0x10 << 14) 129#define SX_UCHAN_0 (0x10 << 14)
130#define SX_UCHAN_8 (0x11 << 14) 130#define SX_UCHAN_8 (0x11 << 14)
131#define SX_UCHAN_16 (0x12 << 14) 131#define SX_UCHAN_16 (0x12 << 14)
132#define SX_UCHAN_24 (0x13 << 14) 132#define SX_UCHAN_24 (0x13 << 14)
133#define SX_SCHAN_0 (0x14 << 14) 133#define SX_SCHAN_0 (0x14 << 14)
134#define SX_SCHAN_8 (0x15 << 14) 134#define SX_SCHAN_8 (0x15 << 14)
135#define SX_SCHAN_16 (0x16 << 14) 135#define SX_SCHAN_16 (0x16 << 14)
136#define SX_SCHAN_24 (0x17 << 14) 136#define SX_SCHAN_24 (0x17 << 14)
137#define SX_USHORT_0 (0x18 << 14) 137#define SX_USHORT_0 (0x18 << 14)
138#define SX_USHORT_8 (0x19 << 14) 138#define SX_USHORT_8 (0x19 << 14)
139#define SX_USHORT_16 (0x1a << 14) 139#define SX_USHORT_16 (0x1a << 14)
140#define SX_SSHORT_0 (0x1c << 14) 140#define SX_SSHORT_0 (0x1c << 14)
141#define SX_SSHORT_8 (0x1d << 14) 141#define SX_SSHORT_8 (0x1d << 14)
142#define SX_SSHORT_16 (0x1e << 14) 142#define SX_SSHORT_16 (0x1e << 14)
143#define SX_LONG (0x1b << 14) 143#define SX_LONG (0x1b << 14)
144#define SX_PACKED (0x1f << 14) 144#define SX_PACKED (0x1f << 14)
145 145
146 146
147#define SX_LD(dreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_LOAD | \ 147#define SX_LD(dreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_LOAD | \
148 SX_LONG | (dreg << 7) | (o)) 148 SX_LONG | (dreg << 7) | (o))
149#define SX_LDB(dreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_LOAD | \ 149#define SX_LDB(dreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_LOAD | \
150 SX_UBYTE_0 | (dreg << 7) | (o)) 150 SX_UBYTE_0 | (dreg << 7) | (o))
151#define SX_LDP(dreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_LOAD | \ 151#define SX_LDP(dreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_LOAD | \
152 SX_PACKED | (dreg << 7) | (o)) 152 SX_PACKED | (dreg << 7) | (o))
153#define SX_LDUQ0(dreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_LOAD | \ 153#define SX_LDUQ0(dreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_LOAD | \
154 SX_UQUAD_0 | (dreg << 7) | (o)) 154 SX_UQUAD_0 | (dreg << 7) | (o))
155#define SX_LDUQ8(dreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_LOAD | \ 155#define SX_LDUQ8(dreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_LOAD | \
156 SX_UQUAD_8 | (dreg << 7) | (o)) 156 SX_UQUAD_8 | (dreg << 7) | (o))
157#define SX_LDUQ16(dreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_LOAD | \ 157#define SX_LDUQ16(dreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_LOAD | \
158 SX_UQUAD_16 | (dreg << 7) | (o)) 158 SX_UQUAD_16 | (dreg << 7) | (o))
159#define SX_LDUQ24(dreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_LOAD | \ 159#define SX_LDUQ24(dreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_LOAD | \
160 SX_UQUAD_24 | (dreg << 7) | (o)) 160 SX_UQUAD_24 | (dreg << 7) | (o))
161#define SX_ST(sreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_STORE | \ 161#define SX_ST(sreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_STORE | \
162 SX_LONG | (sreg << 7) | (o)) 162 SX_LONG | (sreg << 7) | (o))
163#define SX_STM(sreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_STORE_MASK | \ 163#define SX_STM(sreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_STORE_MASK | \
164 SX_LONG | (sreg << 7) | (o)) 164 SX_LONG | (sreg << 7) | (o))
165#define SX_STB(sreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_STORE | \ 165#define SX_STB(sreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_STORE | \
166 SX_UBYTE_0 | (sreg << 7) | (o)) 166 SX_UBYTE_0 | (sreg << 7) | (o))
167#define SX_STP(sreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_STORE | \ 167#define SX_STP(sreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_STORE | \
168 SX_PACKED | (sreg << 7) | (o)) 168 SX_PACKED | (sreg << 7) | (o))
169#define SX_STS(sreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_STORE_SELECT \ 169#define SX_STS(sreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_STORE_SELECT \
170 | SX_LONG | (sreg << 7) | (o)) 170 | SX_LONG | (sreg << 7) | (o))
171#define SX_STBS(reg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_STORE_SELECT \ 171#define SX_STBS(reg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_STORE_SELECT \
172 | SX_UBYTE_0 | (reg << 7) | (o)) 172 | SX_UBYTE_0 | (reg << 7) | (o))
173#define SX_STUQ0(sreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_STORE | \ 173#define SX_STUQ0(sreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_STORE | \
174 SX_UQUAD_0 | (sreg << 7) | (o)) 174 SX_UQUAD_0 | (sreg << 7) | (o))
175#define SX_STUQ8(sreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_STORE | \ 175#define SX_STUQ8(sreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_STORE | \
176 SX_UQUAD_8 | (sreg << 7) | (o)) 176 SX_UQUAD_8 | (sreg << 7) | (o))
177#define SX_STUQ16(sreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_STORE | \ 177#define SX_STUQ16(sreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_STORE | \
178 SX_UQUAD_16 | (sreg << 7) | (o)) 178 SX_UQUAD_16 | (sreg << 7) | (o))
179#define SX_STUQ24(sreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_STORE | \ 179#define SX_STUQ24(sreg, cnt, o) (0x80000000 | ((cnt) << 23) | SX_STORE | \
180 SX_UQUAD_24 | (sreg << 7) | (o)) 180 SX_UQUAD_24 | (sreg << 7) | (o))
181 181
182/* ROP and SELECT instructions */ 182/* ROP and SELECT instructions */
183#define SX_ROPB (0x0 << 21) /* mask bits apply to bytes */ 183#define SX_ROPB (0x0 << 21) /* mask bits apply to bytes */
184#define SX_ROPM (0x1 << 21) /* mask bits apply to each bit */ 184#define SX_ROPM (0x1 << 21) /* mask bits apply to each bit */
185#define SX_ROPL (0x2 << 21) /* mask bits apply per register */ 185#define SX_ROPL (0x2 << 21) /* mask bits apply per register */
186#define SX_SELB (0x4 << 21) /* byte select scalar */ 186#define SX_SELB (0x4 << 21) /* byte select scalar */
187#define SX_SELV (0x6 << 21) /* register select vector */ 187#define SX_SELV (0x6 << 21) /* register select vector */
188#define SX_SELS (0x7 << 21) /* register select scalar */ 188#define SX_SELS (0x7 << 21) /* register select scalar */
189 189
190#define SX_ROP(sa, sb, d, cnt) (0x90000000 | ((cnt) << 24) | SX_ROPL | \ 190#define SX_ROP(sa, sb, d, cnt) (0x90000000 | ((cnt) << 24) | SX_ROPL | \
191 ((sa) << 14) | (sb) | ((d) << 7)) 191 ((sa) << 14) | (sb) | ((d) << 7))
192#define SX_SELECT_S(sa, sb, d, cnt) (0x90000000 | ((cnt) << 24) | SX_SELS | \ 192#define SX_SELECT_S(sa, sb, d, cnt) (0x90000000 | ((cnt) << 24) | SX_SELS | \
193 ((sa) << 14) | (sb) | ((d) << 7)) 193 ((sa) << 14) | (sb) | ((d) << 7))
194 194
195/* multiply group */ 195/* multiply group */
196#define SX_M16X16SR0 (0x0 << 28) /* 16bit multiply, no shift */ 196#define SX_M16X16SR0 (0x0 << 28) /* 16bit multiply, no shift */
197#define SX_M16X16SR8 (0x1 << 28) /* 16bit multiply, shift right 8 */ 197#define SX_M16X16SR8 (0x1 << 28) /* 16bit multiply, shift right 8 */
198#define SX_M16X16SR16 (0x2 << 28) /* 16bit multiply, shift right 16 */ 198#define SX_M16X16SR16 (0x2 << 28) /* 16bit multiply, shift right 16 */
199#define SX_M32X16SR0 (0x4 << 28) /* 32x16bit multiply, no shift */ 199#define SX_M32X16SR0 (0x4 << 28) /* 32x16bit multiply, no shift */
200#define SX_M32X16SR8 (0x5 << 28) /* 32x16bit multiply, shift right 8 */ 200#define SX_M32X16SR8 (0x5 << 28) /* 32x16bit multiply, shift right 8 */
201#define SX_M32X16SR16 (0x6 << 28) /* 32x16bit multiply, shift right 16 */ 201#define SX_M32X16SR16 (0x6 << 28) /* 32x16bit multiply, shift right 16 */
202 202
203#define SX_MULTIPLY (0x0 << 21) /* normal multiplication */ 203#define SX_MULTIPLY (0x0 << 21) /* normal multiplication */
204#define SX_DOT (0x1 << 21) /* dot product of A and B */ 204#define SX_DOT (0x1 << 21) /* dot product of A and B */
205#define SX_SAXP (0x2 << 21) /* A * SCAM + B */ 205#define SX_SAXP (0x2 << 21) /* A * SCAM + B */
206 206
207#define SX_ROUND (0x1 << 23) /* round results */ 207#define SX_ROUND (0x1 << 23) /* round results */
208 208
209#define SX_MUL16X16(sa, sb, d, cnt) (SX_M16X16SR0 | ((cnt) << 24) | \ 209#define SX_MUL16X16(sa, sb, d, cnt) (SX_M16X16SR0 | ((cnt) << 24) | \
210 SX_MULTIPLY | ((sa) << 14) | ((sb) << 7) | (d))  210 SX_MULTIPLY | ((sa) << 14) | ((d) << 7) | (sb))
211#define SX_MUL16X16R(sa, sb, d, cnt) (SX_M16X16SR0 | ((cnt) << 24) | \ 211#define SX_MUL16X16R(sa, sb, d, cnt) (SX_M16X16SR0 | ((cnt) << 24) | \
212 SX_MULTIPLY | ((sa) << 14) | ((sb) << 7) | (d) | SX_ROUND)  212 SX_MULTIPLY | ((sa) << 14) | ((d) << 7) | (sb) | SX_ROUND)
213#define SX_MUL16X16SR8(sa, sb, d, cnt) (SX_M16X16SR8 | ((cnt) << 24) | \ 213#define SX_MUL16X16SR8(sa, sb, d, cnt) (SX_M16X16SR8 | ((cnt) << 24) | \
214 SX_MULTIPLY | ((sa) << 14) | ((sb) << 7) | (d))  214 SX_MULTIPLY | ((sa) << 14) | ((d) << 7) | (sb))
215#define SX_MUL16X16SR8R(sa, sb, d, cnt) (SX_M16X16SR8 | ((cnt) << 24) | \ 215#define SX_MUL16X16SR8R(sa, sb, d, cnt) (SX_M16X16SR8 | ((cnt) << 24) | \
216 SX_MULTIPLY | ((sa) << 14) | ((sb) << 7) | (d) | SX_ROUND)  216 SX_MULTIPLY | ((sa) << 14) | ((d) << 7) | (sb) | SX_ROUND)
217 217
218#define SX_SAXP16X16(sa, sb, d, cnt) (SX_M16X16SR0 | ((cnt) << 24) | \ 218#define SX_SAXP16X16(sa, sb, d, cnt) (SX_M16X16SR0 | ((cnt) << 24) | \
219 SX_SAXP | ((sa) << 14) | ((sb) << 7) | (d))  219 SX_SAXP | ((sa) << 14) | ((d) << 7) | (sb))
220#define SX_SAXP16X16R(sa, sb, d, cnt) (SX_M16X16SR0 | ((cnt) << 24) | \ 220#define SX_SAXP16X16R(sa, sb, d, cnt) (SX_M16X16SR0 | ((cnt) << 24) | \
221 SX_SAXP | ((sa) << 14) | ((sb) << 7) | (d) | SX_ROUND)  221 SX_SAXP | ((sa) << 14) | ((d) << 7) | (sb) | SX_ROUND)
222#define SX_SAXP16X16SR8(sa, sb, d, cnt) (SX_M16X16SR8 | ((cnt) << 24) | \ 222#define SX_SAXP16X16SR8(sa, sb, d, cnt) (SX_M16X16SR8 | ((cnt) << 24) | \
223 SX_SAXP | ((sa) << 14) | ((sb) << 7) | (d))  223 SX_SAXP | ((sa) << 14) | ((d) << 7) | (sb))
224#define SX_SAXP16X16SR8R(sa, sb, d, cnt) (SX_M16X16SR8 | ((cnt) << 24) | \ 224#define SX_SAXP16X16SR8R(sa, sb, d, cnt) (SX_M16X16SR8 | ((cnt) << 24) | \
225 SX_SAXP | ((sa) << 14) | ((sb) << 7) | (d) | SX_ROUND)  225 SX_SAXP | ((sa) << 14) | ((d) << 7) | (sb) | SX_ROUND)
226 226
227/* logic group */ 227/* logic group */
228#define SX_AND_V (0x0 << 21) /* vector AND vector */ 228#define SX_AND_V (0x0 << 21) /* vector AND vector */
229#define SX_AND_S (0x1 << 21) /* vector AND scalar */ 229#define SX_AND_S (0x1 << 21) /* vector AND scalar */
230#define SX_AND_I (0x2 << 21) /* vector AND immediate */ 230#define SX_AND_I (0x2 << 21) /* vector AND immediate */
231#define SX_XOR_V (0x3 << 21) /* vector XOR vector */ 231#define SX_XOR_V (0x3 << 21) /* vector XOR vector */
232#define SX_XOR_S (0x4 << 21) /* vector XOR scalar */ 232#define SX_XOR_S (0x4 << 21) /* vector XOR scalar */
233#define SX_XOR_I (0x5 << 21) /* vector XOR immediate */ 233#define SX_XOR_I (0x5 << 21) /* vector XOR immediate */
234#define SX_OR_V (0x6 << 21) /* vector OR vector */ 234#define SX_OR_V (0x6 << 21) /* vector OR vector */
235#define SX_OR_S (0x7 << 21) /* vector OR scalar */ 235#define SX_OR_S (0x7 << 21) /* vector OR scalar */
236/* immediates are 7bit sign extended to 32bit */ 236/* immediates are 7bit sign extended to 32bit */
237 237
238#define SX_ANDV(sa, sb, d, cnt) (0xb0000000 | ((cnt) << 24) | SX_AND_V | \ 238#define SX_ANDV(sa, sb, d, cnt) (0xb0000000 | ((cnt) << 24) | SX_AND_V | \
239 ((sa) << 14) | ((sb) << 7) | (d)) 239 ((sa) << 14) | ((d) << 7) | (sb))
240#define SX_ANDS(sa, sb, d, cnt) (0xb0000000 | ((cnt) << 24) | SX_AND_S | \ 240#define SX_ANDS(sa, sb, d, cnt) (0xb0000000 | ((cnt) << 24) | SX_AND_S | \
241 ((sa) << 14) | ((sb) << 7) | (d)) 241 ((sa) << 14) | ((d) << 7) | (sb))
242#define SX_ANDI(sa, sb, d, cnt) (0xb0000000 | ((cnt) << 24) | SX_AND_I | \ 242#define SX_ANDI(sa, sb, d, cnt) (0xb0000000 | ((cnt) << 24) | SX_AND_I | \
243 ((sa) << 14) | ((sb) << 7) | (d)) 243 ((sa) << 14) | ((d) << 7) | (sb))
244#define SX_XORV(sa, sb, d, cnt) (0xb0000000 | ((cnt) << 24) | SX_XOR_V | \ 244#define SX_XORV(sa, sb, d, cnt) (0xb0000000 | ((cnt) << 24) | SX_XOR_V | \
245 ((sa) << 14) | ((sb) << 7) | (d)) 245 ((sa) << 14) | ((d) << 7) | (sb))
246#define SX_XORS(sa, sb, d, cnt) (0xb0000000 | ((cnt) << 24) | SX_XOR_S | \ 246#define SX_XORS(sa, sb, d, cnt) (0xb0000000 | ((cnt) << 24) | SX_XOR_S | \
247 ((sa) << 14) | ((sb) << 7) | (d)) 247 ((sa) << 14) | ((d) << 7) | (sb))
248#define SX_XORI(sa, sb, d, cnt) (0xb0000000 | ((cnt) << 24) | SX_XOR_I | \ 248#define SX_XORI(sa, sb, d, cnt) (0xb0000000 | ((cnt) << 24) | SX_XOR_I | \
249 ((sa) << 14) | ((sb) << 7) | (d)) 249 ((sa) << 14) | ((d) << 7) | (sb))
250#define SX_ORV(sa, sb, d, cnt) (0xb0000000 | ((cnt) << 24) | SX_OR_V | \ 250#define SX_ORV(sa, sb, d, cnt) (0xb0000000 | ((cnt) << 24) | SX_OR_V | \
251 ((sa) << 14) | ((sb) << 7) | (d)) 251 ((sa) << 14) | ((d) << 7) | (sb))
252#define SX_ORS(sa, sb, d, cnt) (0xb0000000 | ((cnt) << 24) | SX_OR_S | \ 252#define SX_ORS(sa, sb, d, cnt) (0xb0000000 | ((cnt) << 24) | SX_OR_S | \
253 ((sa) << 14) | ((sb) << 7) | (d)) 253 ((sa) << 14) | ((d) << 7) | (sb))
 254
 255/* arithmetic group */
 256#define SX_ADD_V (0x00 << 21)
 257#define SX_ADD_S (0x01 << 21)
 258#define SX_ADD_I (0x02 << 21)
 259#define SX_SUM (0x03 << 21)
 260#define SX_SUB_V (0x04 << 21)
 261#define SX_SUB_S (0x05 << 21)
 262#define SX_SUB_I (0x06 << 21)
 263#define SX_ABS (0x07 << 21)
 264
 265#define SX_ADDV(sa, sb, d, cnt) (0xa0000000 | ((cnt) << 24) | SX_ADD_V | \
 266 ((sa) << 14) | ((d) << 7) | (sb))
254 267
255#endif /* SXREG_H */ 268#endif /* SXREG_H */