add_and_subtract.py revision 6083:c669a6f8fa9e
11689SN/A# Copyright (c) 2007 The Hewlett-Packard Development Company
214025Sgiacomo.gabrielli@arm.com# All rights reserved.
39913Ssteve.reinhardt@amd.com#
47854SAli.Saidi@ARM.com# Redistribution and use of this software in source and binary forms,
57854SAli.Saidi@ARM.com# with or without modification, are permitted provided that the
67854SAli.Saidi@ARM.com# following conditions are met:
77854SAli.Saidi@ARM.com#
87854SAli.Saidi@ARM.com# The software must be used only for Non-Commercial Use which means any
97854SAli.Saidi@ARM.com# use which is NOT directed to receiving any direct monetary
107854SAli.Saidi@ARM.com# compensation for, or commercial advantage from such use.  Illustrative
117854SAli.Saidi@ARM.com# examples of non-commercial use are academic research, personal study,
127854SAli.Saidi@ARM.com# teaching, education and corporate research & development.
137854SAli.Saidi@ARM.com# Illustrative examples of commercial use are distributing products for
147854SAli.Saidi@ARM.com# commercial advantage and providing services using the software for
152329SN/A# commercial advantage.
161689SN/A#
171689SN/A# If you wish to use this software or functionality therein that may be
181689SN/A# covered by patents for commercial use, please contact:
191689SN/A#     Director of Intellectual Property Licensing
201689SN/A#     Office of Strategy and Technology
211689SN/A#     Hewlett-Packard Company
221689SN/A#     1501 Page Mill Road
231689SN/A#     Palo Alto, California  94304
241689SN/A#
251689SN/A# Redistributions of source code must retain the above copyright notice,
261689SN/A# this list of conditions and the following disclaimer.  Redistributions
271689SN/A# in binary form must reproduce the above copyright notice, this list of
281689SN/A# conditions and the following disclaimer in the documentation and/or
291689SN/A# other materials provided with the distribution.  Neither the name of
301689SN/A# the COPYRIGHT HOLDER(s), HEWLETT-PACKARD COMPANY, nor the names of its
311689SN/A# contributors may be used to endorse or promote products derived from
321689SN/A# this software without specific prior written permission.  No right of
331689SN/A# sublicense is granted herewith.  Derivatives of the software and
341689SN/A# output created using the software may be prepared, but only for
351689SN/A# Non-Commercial Uses.  Derivatives of the software may be shared with
361689SN/A# others provided: (i) the others agree to abide by the list of
371689SN/A# conditions herein which includes the Non-Commercial Use restrictions;
381689SN/A# and (ii) such Derivatives of the software include the above copyright
391689SN/A# notice to acknowledge the contribution from this software where
402665Ssaidi@eecs.umich.edu# applicable, this list of conditions and the disclaimer below.
412665Ssaidi@eecs.umich.edu#
422935Sksewell@umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
431689SN/A# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
441689SN/A# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
459944Smatt.horsnell@ARM.com# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
469944Smatt.horsnell@ARM.com# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
479944Smatt.horsnell@ARM.com# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
481060SN/A# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
491060SN/A# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
503773Sgblack@eecs.umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
516329Sgblack@eecs.umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
526658Snate@binkert.org# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
531717SN/A#
549913Ssteve.reinhardt@amd.com# Authors: Gabe Black
558232Snate@binkert.org
568232Snate@binkert.orgmicrocode = '''
579527SMatt.Horsnell@arm.comdef macroop ADD_R_R
585529Snate@binkert.org{
591060SN/A    add reg, reg, regm, flags=(OF,SF,ZF,AF,PF,CF)
606221Snate@binkert.org};
616221Snate@binkert.org
621061SN/Adef macroop ADD_R_I
635529Snate@binkert.org{
644329Sktlim@umich.edu    limm t1, imm
654329Sktlim@umich.edu    add reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
662292SN/A};
672292SN/A
682292SN/Adef macroop ADD_M_I
692292SN/A{
7012109SRekai.GonzalezAlberquilla@arm.com    limm t2, imm
711060SN/A    ldst t1, seg, sib, disp
7210172Sdam.sunwoo@arm.com    add t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
7310172Sdam.sunwoo@arm.com    st t1, seg, sib, disp
7410172Sdam.sunwoo@arm.com};
7510172Sdam.sunwoo@arm.com
7610172Sdam.sunwoo@arm.comdef macroop ADD_P_I
772292SN/A{
7810328Smitch.hayenga@arm.com    rdip t7
7913453Srekai.gonzalezalberquilla@arm.com    limm t2, imm
8013453Srekai.gonzalezalberquilla@arm.com    ldst t1, seg, riprel, disp
8113453Srekai.gonzalezalberquilla@arm.com    add t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
8213453Srekai.gonzalezalberquilla@arm.com    st t1, seg, riprel, disp
8313453Srekai.gonzalezalberquilla@arm.com};
8413453Srekai.gonzalezalberquilla@arm.com
8513453Srekai.gonzalezalberquilla@arm.comdef macroop ADD_LOCKED_M_I
8613453Srekai.gonzalezalberquilla@arm.com{
8713453Srekai.gonzalezalberquilla@arm.com    limm t2, imm
8813453Srekai.gonzalezalberquilla@arm.com    ldstl t1, seg, sib, disp
8913453Srekai.gonzalezalberquilla@arm.com    add t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
9013453Srekai.gonzalezalberquilla@arm.com    stul t1, seg, sib, disp
912292SN/A};
922292SN/A
932292SN/Adef macroop ADD_LOCKED_P_I
942292SN/A{
952292SN/A    rdip t7
962292SN/A    limm t2, imm
972292SN/A    ldstl t1, seg, riprel, disp
981060SN/A    add t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
991060SN/A    stul t1, seg, riprel, disp
1001061SN/A};
1011060SN/A
1022292SN/Adef macroop ADD_M_R
1031062SN/A{
1041062SN/A    ldst t1, seg, sib, disp
1058240Snate@binkert.org    add t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
1061062SN/A    st t1, seg, sib, disp
1071062SN/A};
1081062SN/A
1098240Snate@binkert.orgdef macroop ADD_P_R
1101062SN/A{
1111062SN/A    rdip t7
1121062SN/A    ldst t1, seg, riprel, disp
1138240Snate@binkert.org    add t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
1141062SN/A    st t1, seg, riprel, disp
1151062SN/A};
1162301SN/A
1178240Snate@binkert.orgdef macroop ADD_LOCKED_M_R
1182301SN/A{
1192301SN/A    ldstl t1, seg, sib, disp
1202292SN/A    add t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
1218240Snate@binkert.org    stul t1, seg, sib, disp
1222292SN/A};
1232292SN/A
1241062SN/Adef macroop ADD_LOCKED_P_R
1258240Snate@binkert.org{
1261062SN/A    rdip t7
1271062SN/A    ldstl t1, seg, riprel, disp
1281062SN/A    add t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
1298240Snate@binkert.org    stul t1, seg, riprel, disp
1301062SN/A};
1311062SN/A
1321062SN/Adef macroop ADD_R_M
1338240Snate@binkert.org{
1341062SN/A    ld t1, seg, sib, disp
1351062SN/A    add reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
1361062SN/A};
1378240Snate@binkert.org
1382292SN/Adef macroop ADD_R_P
1391062SN/A{
1401062SN/A    rdip t7
1418240Snate@binkert.org    ld t1, seg, riprel, disp
1422292SN/A    add reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
1431062SN/A};
14410239Sbinhpham@cs.rutgers.edu
14510239Sbinhpham@cs.rutgers.edudef macroop SUB_R_R
14610239Sbinhpham@cs.rutgers.edu{
14710239Sbinhpham@cs.rutgers.edu    sub reg, reg, regm, flags=(OF,SF,ZF,AF,PF,CF)
14810239Sbinhpham@cs.rutgers.edu};
14910239Sbinhpham@cs.rutgers.edu
15010239Sbinhpham@cs.rutgers.edudef macroop SUB_R_I
15110239Sbinhpham@cs.rutgers.edu{
1521062SN/A    limm t1, imm
1538240Snate@binkert.org    sub reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
1541062SN/A};
1551062SN/A
1561062SN/Adef macroop SUB_R_M
1578240Snate@binkert.org{
1581062SN/A    ld t1, seg, sib, disp
1591062SN/A    sub reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
1601062SN/A};
1618240Snate@binkert.org
1621062SN/Adef macroop SUB_R_P
1631062SN/A{
1641062SN/A    rdip t7
1658240Snate@binkert.org    ld t1, seg, riprel, disp
1661062SN/A    sub reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
1671062SN/A};
1681062SN/A
1698240Snate@binkert.orgdef macroop SUB_M_I
1701062SN/A{
1711062SN/A    limm t2, imm
1722301SN/A    ldst t1, seg, sib, disp
1738240Snate@binkert.org    sub t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
1742301SN/A    st t1, seg, sib, disp
1752301SN/A};
1762301SN/A
1772301SN/Adef macroop SUB_P_I
1788240Snate@binkert.org{
1792301SN/A    rdip t7
1802301SN/A    limm t2, imm
1812301SN/A    ldst t1, seg, riprel, disp
1822307SN/A    sub t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
1838240Snate@binkert.org    st t1, seg, riprel, disp
1842307SN/A};
1852307SN/A
1862307SN/Adef macroop SUB_M_R
1877897Shestness@cs.utexas.edu{
1888240Snate@binkert.org    ldst t1, seg, sib, disp
1897897Shestness@cs.utexas.edu    sub t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
1907897Shestness@cs.utexas.edu    st t1, seg, sib, disp
1917897Shestness@cs.utexas.edu};
1928240Snate@binkert.org
1937897Shestness@cs.utexas.edudef macroop SUB_P_R
1947897Shestness@cs.utexas.edu{
19512109SRekai.GonzalezAlberquilla@arm.com    rdip t7
19612109SRekai.GonzalezAlberquilla@arm.com    ldst t1, seg, riprel, disp
19712109SRekai.GonzalezAlberquilla@arm.com    sub t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
19812109SRekai.GonzalezAlberquilla@arm.com    st t1, seg, riprel, disp
19913610Sgiacomo.gabrielli@arm.com};
20013610Sgiacomo.gabrielli@arm.com
20113610Sgiacomo.gabrielli@arm.comdef macroop ADC_R_R
20213610Sgiacomo.gabrielli@arm.com{
2031062SN/A    adc reg, reg, regm, flags=(OF,SF,ZF,AF,PF,CF)
2041062SN/A};
2051062SN/A
2061062SN/Adef macroop ADC_R_I
20711246Sradhika.jagtap@ARM.com{
20811246Sradhika.jagtap@ARM.com    limm t1, imm
20911246Sradhika.jagtap@ARM.com    adc reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
21011246Sradhika.jagtap@ARM.com};
21111246Sradhika.jagtap@ARM.com
21211246Sradhika.jagtap@ARM.comdef macroop ADC_M_I
21311246Sradhika.jagtap@ARM.com{
21411246Sradhika.jagtap@ARM.com    limm t2, imm
21511246Sradhika.jagtap@ARM.com    ldst t1, seg, sib, disp
2162292SN/A    adc t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
2171060SN/A    st t1, seg, sib, disp
2181060SN/A};
2191060SN/A
2201060SN/Adef macroop ADC_P_I
2211060SN/A{
2221060SN/A    rdip t7
2231060SN/A    limm t2, imm
2241060SN/A    ldst t1, seg, riprel, disp
2251060SN/A    adc t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
2261060SN/A    st t1, seg, riprel, disp
2271060SN/A};
2281060SN/A
2291060SN/Adef macroop ADC_LOCKED_M_I
2301061SN/A{
2311060SN/A    limm t2, imm
2322292SN/A    ldstl t1, seg, sib, disp
2331060SN/A    adc t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
2341060SN/A    stul t1, seg, sib, disp
2351060SN/A};
2361060SN/A
2371060SN/Adef macroop ADC_LOCKED_P_I
2381060SN/A{
2391060SN/A    rdip t7
2401061SN/A    limm t2, imm
2411060SN/A    ldstl t1, seg, riprel, disp
2422292SN/A    adc t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
2431060SN/A    stul t1, seg, riprel, disp
2441060SN/A};
2451060SN/A
2461060SN/Adef macroop ADC_M_R
2471060SN/A{
2481060SN/A    ldst t1, seg, sib, disp
2491060SN/A    adc t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
2501061SN/A    st t1, seg, sib, disp
2511060SN/A};
2529427SAndreas.Sandberg@ARM.com
2531060SN/Adef macroop ADC_P_R
2549444SAndreas.Sandberg@ARM.com{
2559444SAndreas.Sandberg@ARM.com    rdip t7
2569444SAndreas.Sandberg@ARM.com    ldst t1, seg, riprel, disp
2579444SAndreas.Sandberg@ARM.com    adc t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
2589444SAndreas.Sandberg@ARM.com    st t1, seg, riprel, disp
25913641Sqtt2@cornell.edu};
26013641Sqtt2@cornell.edu
26113641Sqtt2@cornell.edudef macroop ADC_LOCKED_M_R
26213641Sqtt2@cornell.edu{
26313641Sqtt2@cornell.edu    ldstl t1, seg, sib, disp
26413641Sqtt2@cornell.edu    adc t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
26513641Sqtt2@cornell.edu    stul t1, seg, sib, disp
26613641Sqtt2@cornell.edu};
26713641Sqtt2@cornell.edu
26813641Sqtt2@cornell.edudef macroop ADC_LOCKED_P_R
26913641Sqtt2@cornell.edu{
27013641Sqtt2@cornell.edu    rdip t7
27113641Sqtt2@cornell.edu    ldstl t1, seg, riprel, disp
27213641Sqtt2@cornell.edu    adc t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
27313641Sqtt2@cornell.edu    stul t1, seg, riprel, disp
27413641Sqtt2@cornell.edu};
27513641Sqtt2@cornell.edu
27613641Sqtt2@cornell.edudef macroop ADC_R_M
27713641Sqtt2@cornell.edu{
27813641Sqtt2@cornell.edu    ld t1, seg, sib, disp
27913641Sqtt2@cornell.edu    adc reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
28013641Sqtt2@cornell.edu};
2819444SAndreas.Sandberg@ARM.com
2829444SAndreas.Sandberg@ARM.comdef macroop ADC_R_P
2839444SAndreas.Sandberg@ARM.com{
2849444SAndreas.Sandberg@ARM.com    rdip t7
2859444SAndreas.Sandberg@ARM.com    ld t1, seg, riprel, disp
2869444SAndreas.Sandberg@ARM.com    adc reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
2879444SAndreas.Sandberg@ARM.com};
2882329SN/A
2896221Snate@binkert.orgdef macroop SBB_R_R
2909444SAndreas.Sandberg@ARM.com{
2919444SAndreas.Sandberg@ARM.com    sbb reg, reg, regm, flags=(OF,SF,ZF,AF,PF,CF)
2922292SN/A};
29310239Sbinhpham@cs.rutgers.edu
29410239Sbinhpham@cs.rutgers.edudef macroop SBB_R_I
2952292SN/A{
2962292SN/A    limm t1, imm
2979444SAndreas.Sandberg@ARM.com    sbb reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
2989444SAndreas.Sandberg@ARM.com};
2999444SAndreas.Sandberg@ARM.com
3009444SAndreas.Sandberg@ARM.comdef macroop SBB_R_M
3019444SAndreas.Sandberg@ARM.com{
30210239Sbinhpham@cs.rutgers.edu    ld t1, seg, sib, disp
30310239Sbinhpham@cs.rutgers.edu    sbb reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
3049444SAndreas.Sandberg@ARM.com};
3059444SAndreas.Sandberg@ARM.com
3062292SN/Adef macroop SBB_R_P
3071060SN/A{
3081060SN/A    rdip t7
3092292SN/A    ld t1, seg, riprel, disp
3102292SN/A    sbb reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
3116221Snate@binkert.org};
3122292SN/A
3132292SN/Adef macroop SBB_M_I
3142292SN/A{
3152292SN/A    limm t2, imm
3162292SN/A    ldst t1, seg, sib, disp
3171061SN/A    sbb t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
3181060SN/A    st t1, seg, sib, disp
3192292SN/A};
3201060SN/A
3216221Snate@binkert.orgdef macroop SBB_P_I
3226221Snate@binkert.org{
3231060SN/A    rdip t7
3241060SN/A    limm t2, imm
3251061SN/A    ldst t1, seg, riprel, disp
3261060SN/A    sbb t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
3272292SN/A    st t1, seg, riprel, disp
3281060SN/A};
3292292SN/A
3302292SN/Adef macroop SBB_M_R
3311060SN/A{
3322292SN/A    ldst t1, seg, sib, disp
3332292SN/A    sbb t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
3342292SN/A    st t1, seg, sib, disp
3352292SN/A};
3362292SN/A
3371060SN/Adef macroop SBB_P_R
3381060SN/A{
3391061SN/A    rdip t7
3402863Sktlim@umich.edu    ldst t1, seg, riprel, disp
3419444SAndreas.Sandberg@ARM.com    sbb t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
3421060SN/A    st t1, seg, riprel, disp
3439444SAndreas.Sandberg@ARM.com};
3449444SAndreas.Sandberg@ARM.com
3459444SAndreas.Sandberg@ARM.comdef macroop NEG_R
3469444SAndreas.Sandberg@ARM.com{
34711650Srekai.gonzalezalberquilla@arm.com    sub reg, t0, reg, flags=(CF,OF,SF,ZF,AF,PF)
34811650Srekai.gonzalezalberquilla@arm.com};
3499444SAndreas.Sandberg@ARM.com
3509444SAndreas.Sandberg@ARM.comdef macroop NEG_M
3512863Sktlim@umich.edu{
3522316SN/A    ldst t1, seg, sib, disp
3531060SN/A    sub t1, t0, t1, flags=(CF,OF,SF,ZF,AF,PF)
3542316SN/A    st t1, seg, sib, disp
3552316SN/A};
3562307SN/A
3571060SN/Adef macroop NEG_P
3589444SAndreas.Sandberg@ARM.com{
3599444SAndreas.Sandberg@ARM.com    rdip t7
3601060SN/A    ldst t1, seg, riprel, disp
3619444SAndreas.Sandberg@ARM.com    sub t1, t0, t1, flags=(CF,OF,SF,ZF,AF,PF)
3629444SAndreas.Sandberg@ARM.com    st t1, seg, riprel, disp
3639444SAndreas.Sandberg@ARM.com};
3649444SAndreas.Sandberg@ARM.com'''
3656221Snate@binkert.org