subtraction.py revision 6580:a1c40860fe09
110298Salexandru.dutu@amd.com# Copyright (c) 2007 The Hewlett-Packard Development Company
210298Salexandru.dutu@amd.com# All rights reserved.
310298Salexandru.dutu@amd.com#
410298Salexandru.dutu@amd.com# Redistribution and use of this software in source and binary forms,
510298Salexandru.dutu@amd.com# with or without modification, are permitted provided that the
610298Salexandru.dutu@amd.com# following conditions are met:
710298Salexandru.dutu@amd.com#
810298Salexandru.dutu@amd.com# The software must be used only for Non-Commercial Use which means any
910298Salexandru.dutu@amd.com# use which is NOT directed to receiving any direct monetary
1010298Salexandru.dutu@amd.com# compensation for, or commercial advantage from such use.  Illustrative
1110298Salexandru.dutu@amd.com# examples of non-commercial use are academic research, personal study,
1210298Salexandru.dutu@amd.com# teaching, education and corporate research & development.
1310298Salexandru.dutu@amd.com# Illustrative examples of commercial use are distributing products for
1410298Salexandru.dutu@amd.com# commercial advantage and providing services using the software for
1510298Salexandru.dutu@amd.com# commercial advantage.
1610298Salexandru.dutu@amd.com#
1710298Salexandru.dutu@amd.com# If you wish to use this software or functionality therein that may be
1810298Salexandru.dutu@amd.com# covered by patents for commercial use, please contact:
1910298Salexandru.dutu@amd.com#     Director of Intellectual Property Licensing
2010298Salexandru.dutu@amd.com#     Office of Strategy and Technology
2110298Salexandru.dutu@amd.com#     Hewlett-Packard Company
2210298Salexandru.dutu@amd.com#     1501 Page Mill Road
2310298Salexandru.dutu@amd.com#     Palo Alto, California  94304
2410298Salexandru.dutu@amd.com#
2510298Salexandru.dutu@amd.com# Redistributions of source code must retain the above copyright notice,
2610298Salexandru.dutu@amd.com# this list of conditions and the following disclaimer.  Redistributions
2710298Salexandru.dutu@amd.com# in binary form must reproduce the above copyright notice, this list of
2810298Salexandru.dutu@amd.com# conditions and the following disclaimer in the documentation and/or
2910298Salexandru.dutu@amd.com# other materials provided with the distribution.  Neither the name of
3010298Salexandru.dutu@amd.com# the COPYRIGHT HOLDER(s), HEWLETT-PACKARD COMPANY, nor the names of its
3110298Salexandru.dutu@amd.com# contributors may be used to endorse or promote products derived from
3210298Salexandru.dutu@amd.com# this software without specific prior written permission.  No right of
3310298Salexandru.dutu@amd.com# sublicense is granted herewith.  Derivatives of the software and
3410298Salexandru.dutu@amd.com# output created using the software may be prepared, but only for
3510298Salexandru.dutu@amd.com# Non-Commercial Uses.  Derivatives of the software may be shared with
3610298Salexandru.dutu@amd.com# others provided: (i) the others agree to abide by the list of
3710298Salexandru.dutu@amd.com# conditions herein which includes the Non-Commercial Use restrictions;
3810298Salexandru.dutu@amd.com# and (ii) such Derivatives of the software include the above copyright
3910298Salexandru.dutu@amd.com# notice to acknowledge the contribution from this software where
4010298Salexandru.dutu@amd.com# applicable, this list of conditions and the disclaimer below.
4110298Salexandru.dutu@amd.com#
4210298Salexandru.dutu@amd.com# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
4310298Salexandru.dutu@amd.com# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
4411800Sbrandon.potter@amd.com# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
4511800Sbrandon.potter@amd.com# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
4610298Salexandru.dutu@amd.com# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
4710298Salexandru.dutu@amd.com# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
4810298Salexandru.dutu@amd.com# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
4910298Salexandru.dutu@amd.com# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
5010298Salexandru.dutu@amd.com# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
5110298Salexandru.dutu@amd.com# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
5210298Salexandru.dutu@amd.com# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5310298Salexandru.dutu@amd.com#
5410298Salexandru.dutu@amd.com# Authors: Gabe Black
5510298Salexandru.dutu@amd.com
5610298Salexandru.dutu@amd.commicrocode = '''
5710298Salexandru.dutu@amd.comdef macroop PSUBB_XMM_XMM {
5810298Salexandru.dutu@amd.com    msubi xmml, xmml, xmmlm, size=1, ext=0
5910298Salexandru.dutu@amd.com    msubi xmmh, xmmh, xmmhm, size=1, ext=0
6010298Salexandru.dutu@amd.com};
6110298Salexandru.dutu@amd.com
6210298Salexandru.dutu@amd.comdef macroop PSUBB_XMM_M {
6310298Salexandru.dutu@amd.com    ldfp ufp1, seg, sib, "DISPLACEMENT", dataSize=8
6410298Salexandru.dutu@amd.com    ldfp ufp2, seg, sib, "DISPLACEMENT + 8", dataSize=8
6510298Salexandru.dutu@amd.com    msubi xmml, xmml, ufp1, size=1, ext=0
6610298Salexandru.dutu@amd.com    msubi xmmh, xmmh, ufp2, size=1, ext=0
6710298Salexandru.dutu@amd.com};
6810298Salexandru.dutu@amd.com
6910298Salexandru.dutu@amd.comdef macroop PSUBB_XMM_P {
7010298Salexandru.dutu@amd.com    rdip t7
7110298Salexandru.dutu@amd.com    ldfp ufp1, seg, riprel, "DISPLACEMENT", dataSize=8
7210298Salexandru.dutu@amd.com    ldfp ufp2, seg, riprel, "DISPLACEMENT + 8", dataSize=8
7310298Salexandru.dutu@amd.com    msubi xmml, xmml, ufp1, size=1, ext=0
7410298Salexandru.dutu@amd.com    msubi xmmh, xmmh, ufp2, size=1, ext=0
7510298Salexandru.dutu@amd.com};
7610298Salexandru.dutu@amd.com
7710298Salexandru.dutu@amd.comdef macroop PSUBW_XMM_XMM {
7810298Salexandru.dutu@amd.com    msubi xmml, xmml, xmmlm, size=2, ext=0
7910298Salexandru.dutu@amd.com    msubi xmmh, xmmh, xmmhm, size=2, ext=0
8010298Salexandru.dutu@amd.com};
8110298Salexandru.dutu@amd.com
8210298Salexandru.dutu@amd.comdef macroop PSUBW_XMM_M {
8310298Salexandru.dutu@amd.com    ldfp ufp1, seg, sib, "DISPLACEMENT", dataSize=8
8410298Salexandru.dutu@amd.com    ldfp ufp2, seg, sib, "DISPLACEMENT + 8", dataSize=8
8510298Salexandru.dutu@amd.com    msubi xmml, xmml, ufp1, size=2, ext=0
8610298Salexandru.dutu@amd.com    msubi xmmh, xmmh, ufp2, size=2, ext=0
8710298Salexandru.dutu@amd.com};
8810298Salexandru.dutu@amd.com
8910298Salexandru.dutu@amd.comdef macroop PSUBW_XMM_P {
9010298Salexandru.dutu@amd.com    rdip t7
9110298Salexandru.dutu@amd.com    ldfp ufp1, seg, riprel, "DISPLACEMENT", dataSize=8
9210298Salexandru.dutu@amd.com    ldfp ufp2, seg, riprel, "DISPLACEMENT + 8", dataSize=8
9310298Salexandru.dutu@amd.com    msubi xmml, xmml, ufp1, size=2, ext=0
9410298Salexandru.dutu@amd.com    msubi xmmh, xmmh, ufp2, size=2, ext=0
9510298Salexandru.dutu@amd.com};
9610298Salexandru.dutu@amd.com
9710298Salexandru.dutu@amd.comdef macroop PSUBD_XMM_XMM {
9810298Salexandru.dutu@amd.com    msubi xmml, xmml, xmmlm, size=4, ext=0
9910298Salexandru.dutu@amd.com    msubi xmmh, xmmh, xmmhm, size=4, ext=0
10010298Salexandru.dutu@amd.com};
10110298Salexandru.dutu@amd.com
10210298Salexandru.dutu@amd.comdef macroop PSUBD_XMM_M {
10312446Sgabeblack@google.com    ldfp ufp1, seg, sib, "DISPLACEMENT", dataSize=8
10410298Salexandru.dutu@amd.com    ldfp ufp2, seg, sib, "DISPLACEMENT + 8", dataSize=8
10510298Salexandru.dutu@amd.com    msubi xmml, xmml, ufp1, size=4, ext=0
10610298Salexandru.dutu@amd.com    msubi xmmh, xmmh, ufp2, size=4, ext=0
10710298Salexandru.dutu@amd.com};
10810298Salexandru.dutu@amd.com
10910298Salexandru.dutu@amd.comdef macroop PSUBD_XMM_P {
11010298Salexandru.dutu@amd.com    rdip t7
11110298Salexandru.dutu@amd.com    ldfp ufp1, seg, riprel, "DISPLACEMENT", dataSize=8
11210298Salexandru.dutu@amd.com    ldfp ufp2, seg, riprel, "DISPLACEMENT + 8", dataSize=8
11310298Salexandru.dutu@amd.com    msubi xmml, xmml, ufp1, size=4, ext=0
11410298Salexandru.dutu@amd.com    msubi xmmh, xmmh, ufp2, size=4, ext=0
11510298Salexandru.dutu@amd.com};
11610298Salexandru.dutu@amd.com
11710298Salexandru.dutu@amd.comdef macroop PSUBQ_XMM_XMM {
11810298Salexandru.dutu@amd.com    msubi xmml, xmml, xmmlm, size=8, ext=0
11910298Salexandru.dutu@amd.com    msubi xmmh, xmmh, xmmhm, size=8, ext=0
12010298Salexandru.dutu@amd.com};
12110298Salexandru.dutu@amd.com
12210298Salexandru.dutu@amd.comdef macroop PSUBQ_XMM_M {
12310298Salexandru.dutu@amd.com    ldfp ufp1, seg, sib, "DISPLACEMENT", dataSize=8
12410298Salexandru.dutu@amd.com    ldfp ufp2, seg, sib, "DISPLACEMENT + 8", dataSize=8
12510298Salexandru.dutu@amd.com    msubi xmml, xmml, ufp1, size=8, ext=0
12610298Salexandru.dutu@amd.com    msubi xmmh, xmmh, ufp2, size=8, ext=0
12710298Salexandru.dutu@amd.com};
12810298Salexandru.dutu@amd.com
12910298Salexandru.dutu@amd.comdef macroop PSUBQ_XMM_P {
13010298Salexandru.dutu@amd.com    rdip t7
13110298Salexandru.dutu@amd.com    ldfp ufp1, seg, riprel, "DISPLACEMENT", dataSize=8
13210298Salexandru.dutu@amd.com    ldfp ufp2, seg, riprel, "DISPLACEMENT + 8", dataSize=8
13310298Salexandru.dutu@amd.com    msubi xmml, xmml, ufp1, size=8, ext=0
13410298Salexandru.dutu@amd.com    msubi xmmh, xmmh, ufp2, size=8, ext=0
13510298Salexandru.dutu@amd.com};
13610298Salexandru.dutu@amd.com
13710298Salexandru.dutu@amd.comdef macroop PSUBSB_XMM_XMM {
13812446Sgabeblack@google.com    msubi xmml, xmml, xmmlm, size=1, ext=4
13910298Salexandru.dutu@amd.com    msubi xmmh, xmmh, xmmhm, size=1, ext=4
14010298Salexandru.dutu@amd.com};
14110556Salexandru.dutu@amd.com
14212432Sgabeblack@google.comdef macroop PSUBSB_XMM_M {
14310298Salexandru.dutu@amd.com    ldfp ufp1, seg, sib, "DISPLACEMENT", dataSize=8
14410298Salexandru.dutu@amd.com    ldfp ufp2, seg, sib, "DISPLACEMENT + 8", dataSize=8
14511175Sandreas.hansson@arm.com    msubi xmml, xmml, ufp1, size=1, ext=4
14610298Salexandru.dutu@amd.com    msubi xmmh, xmmh, ufp2, size=1, ext=4
14710558Salexandru.dutu@amd.com};
14811175Sandreas.hansson@arm.com
14911175Sandreas.hansson@arm.comdef macroop PSUBSB_XMM_P {
15011175Sandreas.hansson@arm.com    rdip t7
15111168Sandreas.hansson@arm.com    ldfp ufp1, seg, riprel, "DISPLACEMENT", dataSize=8
15211168Sandreas.hansson@arm.com    ldfp ufp2, seg, riprel, "DISPLACEMENT + 8", dataSize=8
15310298Salexandru.dutu@amd.com    msubi xmml, xmml, ufp1, size=1, ext=4
15410298Salexandru.dutu@amd.com    msubi xmmh, xmmh, ufp2, size=1, ext=4
155};
156
157def macroop PSUBSW_XMM_XMM {
158    msubi xmml, xmml, xmmlm, size=2, ext=4
159    msubi xmmh, xmmh, xmmhm, size=2, ext=4
160};
161
162def macroop PSUBSW_XMM_M {
163    ldfp ufp1, seg, sib, "DISPLACEMENT", dataSize=8
164    ldfp ufp2, seg, sib, "DISPLACEMENT + 8", dataSize=8
165    msubi xmml, xmml, ufp1, size=2, ext=4
166    msubi xmmh, xmmh, ufp2, size=2, ext=4
167};
168
169def macroop PSUBSW_XMM_P {
170    rdip t7
171    ldfp ufp1, seg, riprel, "DISPLACEMENT", dataSize=8
172    ldfp ufp2, seg, riprel, "DISPLACEMENT + 8", dataSize=8
173    msubi xmml, xmml, ufp1, size=2, ext=4
174    msubi xmmh, xmmh, ufp2, size=2, ext=4
175};
176
177def macroop PSUBUSB_XMM_XMM {
178    msubi xmml, xmml, xmmlm, size=1, ext=2
179    msubi xmmh, xmmh, xmmhm, size=1, ext=2
180};
181
182def macroop PSUBUSB_XMM_M {
183    ldfp ufp1, seg, sib, "DISPLACEMENT", dataSize=8
184    ldfp ufp2, seg, sib, "DISPLACEMENT + 8", dataSize=8
185    msubi xmml, xmml, ufp1, size=1, ext=2
186    msubi xmmh, xmmh, ufp2, size=1, ext=2
187};
188
189def macroop PSUBUSB_XMM_P {
190    rdip t7
191    ldfp ufp1, seg, riprel, "DISPLACEMENT", dataSize=8
192    ldfp ufp2, seg, riprel, "DISPLACEMENT + 8", dataSize=8
193    msubi xmml, xmml, ufp1, size=1, ext=2
194    msubi xmmh, xmmh, ufp2, size=1, ext=2
195};
196
197def macroop PSUBUSW_XMM_XMM {
198    msubi xmml, xmml, xmmlm, size=2, ext=2
199    msubi xmmh, xmmh, xmmhm, size=2, ext=2
200};
201
202def macroop PSUBUSW_XMM_M {
203    ldfp ufp1, seg, sib, "DISPLACEMENT", dataSize=8
204    ldfp ufp2, seg, sib, "DISPLACEMENT + 8", dataSize=8
205    msubi xmml, xmml, ufp1, size=2, ext=2
206    msubi xmmh, xmmh, ufp2, size=2, ext=2
207};
208
209def macroop PSUBUSW_XMM_P {
210    rdip t7
211    ldfp ufp1, seg, riprel, "DISPLACEMENT", dataSize=8
212    ldfp ufp2, seg, riprel, "DISPLACEMENT + 8", dataSize=8
213    msubi xmml, xmml, ufp1, size=2, ext=2
214    msubi xmmh, xmmh, ufp2, size=2, ext=2
215};
216'''
217