add_and_subtract.py revision 6090
16145SN/A# Copyright (c) 2007 The Hewlett-Packard Development Company
26145SN/A# All rights reserved.
36145SN/A#
46145SN/A# Redistribution and use of this software in source and binary forms,
56145SN/A# with or without modification, are permitted provided that the
66145SN/A# following conditions are met:
76145SN/A#
86145SN/A# The software must be used only for Non-Commercial Use which means any
96145SN/A# use which is NOT directed to receiving any direct monetary
106145SN/A# compensation for, or commercial advantage from such use.  Illustrative
116145SN/A# examples of non-commercial use are academic research, personal study,
126145SN/A# teaching, education and corporate research & development.
136145SN/A# Illustrative examples of commercial use are distributing products for
146145SN/A# commercial advantage and providing services using the software for
156145SN/A# commercial advantage.
166145SN/A#
176145SN/A# If you wish to use this software or functionality therein that may be
186145SN/A# covered by patents for commercial use, please contact:
196145SN/A#     Director of Intellectual Property Licensing
206145SN/A#     Office of Strategy and Technology
216145SN/A#     Hewlett-Packard Company
226145SN/A#     1501 Page Mill Road
236145SN/A#     Palo Alto, California  94304
246145SN/A#
256145SN/A# Redistributions of source code must retain the above copyright notice,
266145SN/A# this list of conditions and the following disclaimer.  Redistributions
276145SN/A# in binary form must reproduce the above copyright notice, this list of
286145SN/A# conditions and the following disclaimer in the documentation and/or
297832SN/A# other materials provided with the distribution.  Neither the name of
307832SN/A# the COPYRIGHT HOLDER(s), HEWLETT-PACKARD COMPANY, nor the names of its
319356Snilay@cs.wisc.edu# contributors may be used to endorse or promote products derived from
328232SN/A# this software without specific prior written permission.  No right of
337054SN/A# sublicense is granted herewith.  Derivatives of the software and
348257SBrad.Beckmann@amd.com# output created using the software may be prepared, but only for
358255SBrad.Beckmann@amd.com# Non-Commercial Uses.  Derivatives of the software may be shared with
367054SN/A# others provided: (i) the others agree to abide by the list of
376145SN/A# conditions herein which includes the Non-Commercial Use restrictions;
387055SN/A# and (ii) such Derivatives of the software include the above copyright
397055SN/A# notice to acknowledge the contribution from this software where
407054SN/A# applicable, this list of conditions and the disclaimer below.
418257SBrad.Beckmann@amd.com#
426145SN/A# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
436145SN/A# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
446145SN/A# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
456145SN/A# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
466145SN/A# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
476145SN/A# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
486145SN/A# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
4911096Snilay@cs.wisc.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
5011096Snilay@cs.wisc.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
5111096Snilay@cs.wisc.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
5211096Snilay@cs.wisc.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5311096Snilay@cs.wisc.edu#
546145SN/A# Authors: Gabe Black
556881SN/A
566881SN/Amicrocode = '''
576285SN/Adef macroop ADD_R_R
588257SBrad.Beckmann@amd.com{
598257SBrad.Beckmann@amd.com    add reg, reg, regm, flags=(OF,SF,ZF,AF,PF,CF)
6011320Ssteve.reinhardt@amd.com};
618257SBrad.Beckmann@amd.com
629594Snilay@cs.wisc.edudef macroop ADD_R_I
639594Snilay@cs.wisc.edu{
648257SBrad.Beckmann@amd.com    limm t1, imm
658257SBrad.Beckmann@amd.com    add reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
668257SBrad.Beckmann@amd.com};
676881SN/A
6810078Snilay@cs.wisc.edudef macroop ADD_M_I
699869Sjthestness@gmail.com{
707054SN/A    limm t2, imm
718257SBrad.Beckmann@amd.com    ldst t1, seg, sib, disp
726145SN/A    add t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
738257SBrad.Beckmann@amd.com    st t1, seg, sib, disp
748257SBrad.Beckmann@amd.com};
758257SBrad.Beckmann@amd.com
768257SBrad.Beckmann@amd.comdef macroop ADD_P_I
778257SBrad.Beckmann@amd.com{
787054SN/A    rdip t7
796145SN/A    limm t2, imm
809594Snilay@cs.wisc.edu    ldst t1, seg, riprel, disp
819594Snilay@cs.wisc.edu    add t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
828257SBrad.Beckmann@amd.com    st t1, seg, riprel, disp
838257SBrad.Beckmann@amd.com};
848257SBrad.Beckmann@amd.com
856881SN/Adef macroop ADD_LOCKED_M_I
868257SBrad.Beckmann@amd.com{
878257SBrad.Beckmann@amd.com    limm t2, imm
888257SBrad.Beckmann@amd.com    ldstl t1, seg, sib, disp
898257SBrad.Beckmann@amd.com    add t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
908257SBrad.Beckmann@amd.com    stul t1, seg, sib, disp
918257SBrad.Beckmann@amd.com};
928257SBrad.Beckmann@amd.com
938257SBrad.Beckmann@amd.comdef macroop ADD_LOCKED_P_I
948257SBrad.Beckmann@amd.com{
958257SBrad.Beckmann@amd.com    rdip t7
968257SBrad.Beckmann@amd.com    limm t2, imm
977054SN/A    ldstl t1, seg, riprel, disp
986145SN/A    add t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
996145SN/A    stul t1, seg, riprel, disp
1008257SBrad.Beckmann@amd.com};
1019799Snilay@cs.wisc.edu
1027054SN/Adef macroop ADD_M_R
1037054SN/A{
1047054SN/A    ldst t1, seg, sib, disp
1058257SBrad.Beckmann@amd.com    add t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
1068257SBrad.Beckmann@amd.com    st t1, seg, sib, disp
10710005Snilay@cs.wisc.edu};
1088257SBrad.Beckmann@amd.com
10911320Ssteve.reinhardt@amd.comdef macroop ADD_P_R
1107054SN/A{
1116881SN/A    rdip t7
1128257SBrad.Beckmann@amd.com    ldst t1, seg, riprel, disp
1137054SN/A    add t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
11411096Snilay@cs.wisc.edu    st t1, seg, riprel, disp
11511096Snilay@cs.wisc.edu};
11611096Snilay@cs.wisc.edu
11711096Snilay@cs.wisc.edudef macroop ADD_LOCKED_M_R
11811096Snilay@cs.wisc.edu{
11911096Snilay@cs.wisc.edu    ldstl t1, seg, sib, disp
1206145SN/A    add t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
1217054SN/A    stul t1, seg, sib, disp
1227054SN/A};
1237054SN/A
1247054SN/Adef macroop ADD_LOCKED_P_R
1256145SN/A{
1267054SN/A    rdip t7
1278257SBrad.Beckmann@amd.com    ldstl t1, seg, riprel, disp
1288257SBrad.Beckmann@amd.com    add t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
1298257SBrad.Beckmann@amd.com    stul t1, seg, riprel, disp
1308257SBrad.Beckmann@amd.com};
1318257SBrad.Beckmann@amd.com
1328257SBrad.Beckmann@amd.comdef macroop ADD_R_M
13311096Snilay@cs.wisc.edu{
1348257SBrad.Beckmann@amd.com    ld t1, seg, sib, disp
1357054SN/A    add reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
13611320Ssteve.reinhardt@amd.com};
1377054SN/A
13811096Snilay@cs.wisc.edudef macroop ADD_R_P
13911096Snilay@cs.wisc.edu{
14011096Snilay@cs.wisc.edu    rdip t7
1417054SN/A    ld t1, seg, riprel, disp
1427054SN/A    add reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
1437054SN/A};
1447054SN/A
1459799Snilay@cs.wisc.edudef macroop SUB_R_R
1469799Snilay@cs.wisc.edu{
1479799Snilay@cs.wisc.edu    sub reg, reg, regm, flags=(OF,SF,ZF,AF,PF,CF)
1487054SN/A};
1497054SN/A
1506895SN/Adef macroop SUB_R_I
1516895SN/A{
1526895SN/A    limm t1, imm
1537054SN/A    sub reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
15411320Ssteve.reinhardt@amd.com};
1558257SBrad.Beckmann@amd.com
1567054SN/Adef macroop SUB_R_M
1577832SN/A{
1587832SN/A    ld t1, seg, sib, disp
15911320Ssteve.reinhardt@amd.com    sub reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
1608257SBrad.Beckmann@amd.com};
1618257SBrad.Beckmann@amd.com
1628257SBrad.Beckmann@amd.comdef macroop SUB_R_P
1638257SBrad.Beckmann@amd.com{
1648257SBrad.Beckmann@amd.com    rdip t7
1658257SBrad.Beckmann@amd.com    ld t1, seg, riprel, disp
1668257SBrad.Beckmann@amd.com    sub reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
1678257SBrad.Beckmann@amd.com};
1687054SN/A
1697054SN/Adef macroop SUB_M_I
1707054SN/A{
1717054SN/A    limm t2, imm
1729799Snilay@cs.wisc.edu    ldst t1, seg, sib, disp
1737054SN/A    sub t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
1747054SN/A    st t1, seg, sib, disp
1757054SN/A};
1767054SN/A
1777054SN/Adef macroop SUB_P_I
1788257SBrad.Beckmann@amd.com{
17911320Ssteve.reinhardt@amd.com    rdip t7
1808257SBrad.Beckmann@amd.com    limm t2, imm
1817054SN/A    ldst t1, seg, riprel, disp
1828257SBrad.Beckmann@amd.com    sub t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
1838257SBrad.Beckmann@amd.com    st t1, seg, riprel, disp
1848257SBrad.Beckmann@amd.com};
1858257SBrad.Beckmann@amd.com
1869799Snilay@cs.wisc.edudef macroop SUB_LOCKED_M_I
1877054SN/A{
1887054SN/A    limm t2, imm
1898257SBrad.Beckmann@amd.com    ldstl t1, seg, sib, disp
1908257SBrad.Beckmann@amd.com    sub t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
1918257SBrad.Beckmann@amd.com    stul t1, seg, sib, disp
1928257SBrad.Beckmann@amd.com};
1938257SBrad.Beckmann@amd.com
1949799Snilay@cs.wisc.edudef macroop SUB_LOCKED_P_I
1957054SN/A{
1968257SBrad.Beckmann@amd.com    rdip t7
1978257SBrad.Beckmann@amd.com    limm t2, imm
1988257SBrad.Beckmann@amd.com    ldstl t1, seg, riprel, disp
1998257SBrad.Beckmann@amd.com    sub t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
2008257SBrad.Beckmann@amd.com    stul t1, seg, riprel, disp
2018257SBrad.Beckmann@amd.com};
2029799Snilay@cs.wisc.edu
2037054SN/Adef macroop SUB_M_R
2047054SN/A{
2057054SN/A    ldst t1, seg, sib, disp
2066145SN/A    sub t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
2076145SN/A    st t1, seg, sib, disp
2087054SN/A};
20911096Snilay@cs.wisc.edu
21011096Snilay@cs.wisc.edudef macroop SUB_P_R
2117054SN/A{
2127054SN/A    rdip t7
2137054SN/A    ldst t1, seg, riprel, disp
2146145SN/A    sub t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
2157054SN/A    st t1, seg, riprel, disp
2167054SN/A};
2177054SN/A
2187054SN/Adef macroop SUB_LOCKED_M_R
2197054SN/A{
2207054SN/A    ldstl t1, seg, sib, disp
2217054SN/A    sub t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
2227054SN/A    stul t1, seg, sib, disp
2237054SN/A};
2247054SN/A
2257054SN/Adef macroop SUB_LOCKED_P_R
2267054SN/A{
2277054SN/A    rdip t7
2287054SN/A    ldstl t1, seg, riprel, disp
2297054SN/A    sub t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
2307054SN/A    stul t1, seg, riprel, disp
2317054SN/A};
2327054SN/A
2337054SN/Adef macroop ADC_R_R
2347054SN/A{
2357054SN/A    adc reg, reg, regm, flags=(OF,SF,ZF,AF,PF,CF)
2367054SN/A};
2377054SN/A
2387054SN/Adef macroop ADC_R_I
2397054SN/A{
2407054SN/A    limm t1, imm
2417054SN/A    adc reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
2426145SN/A};
2436145SN/A
2446145SN/Adef macroop ADC_M_I
2456145SN/A{
2467054SN/A    limm t2, imm
24711096Snilay@cs.wisc.edu    ldst t1, seg, sib, disp
24811096Snilay@cs.wisc.edu    adc t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
2496145SN/A    st t1, seg, sib, disp
2507054SN/A};
2517054SN/A
2527054SN/Adef macroop ADC_P_I
2536145SN/A{
2546145SN/A    rdip t7
2557054SN/A    limm t2, imm
25611096Snilay@cs.wisc.edu    ldst t1, seg, riprel, disp
25711096Snilay@cs.wisc.edu    adc t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
25811096Snilay@cs.wisc.edu    st t1, seg, riprel, disp
2596145SN/A};
2607054SN/A
2616145SN/Adef macroop ADC_LOCKED_M_I
2626145SN/A{
2637054SN/A    limm t2, imm
26411096Snilay@cs.wisc.edu    ldstl t1, seg, sib, disp
26511096Snilay@cs.wisc.edu    adc t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
2666145SN/A    stul t1, seg, sib, disp
2677054SN/A};
2687054SN/A
2697054SN/Adef macroop ADC_LOCKED_P_I
2707054SN/A{
2716145SN/A    rdip t7
2727054SN/A    limm t2, imm
2737054SN/A    ldstl t1, seg, riprel, disp
2746145SN/A    adc t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
2757054SN/A    stul t1, seg, riprel, disp
27610005Snilay@cs.wisc.edu};
2777054SN/A
2787054SN/Adef macroop ADC_M_R
2797054SN/A{
2807054SN/A    ldst t1, seg, sib, disp
2817054SN/A    adc t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
2827054SN/A    st t1, seg, sib, disp
2837054SN/A};
2847054SN/A
2857054SN/Adef macroop ADC_P_R
2867054SN/A{
2877054SN/A    rdip t7
2887054SN/A    ldst t1, seg, riprel, disp
2896145SN/A    adc t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
2906145SN/A    st t1, seg, riprel, disp
2917780SN/A};
2927780SN/A
2937780SN/Adef macroop ADC_LOCKED_M_R
2947780SN/A{
2957780SN/A    ldstl t1, seg, sib, disp
2966145SN/A    adc t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
2977054SN/A    stul t1, seg, sib, disp
2986145SN/A};
299
300def macroop ADC_LOCKED_P_R
301{
302    rdip t7
303    ldstl t1, seg, riprel, disp
304    adc t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
305    stul t1, seg, riprel, disp
306};
307
308def macroop ADC_R_M
309{
310    ld t1, seg, sib, disp
311    adc reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
312};
313
314def macroop ADC_R_P
315{
316    rdip t7
317    ld t1, seg, riprel, disp
318    adc reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
319};
320
321def macroop SBB_R_R
322{
323    sbb reg, reg, regm, flags=(OF,SF,ZF,AF,PF,CF)
324};
325
326def macroop SBB_R_I
327{
328    limm t1, imm
329    sbb reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
330};
331
332def macroop SBB_R_M
333{
334    ld t1, seg, sib, disp
335    sbb reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
336};
337
338def macroop SBB_R_P
339{
340    rdip t7
341    ld t1, seg, riprel, disp
342    sbb reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF)
343};
344
345def macroop SBB_M_I
346{
347    limm t2, imm
348    ldst t1, seg, sib, disp
349    sbb t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
350    st t1, seg, sib, disp
351};
352
353def macroop SBB_P_I
354{
355    rdip t7
356    limm t2, imm
357    ldst t1, seg, riprel, disp
358    sbb t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
359    st t1, seg, riprel, disp
360};
361
362def macroop SBB_LOCKED_M_I
363{
364    limm t2, imm
365    ldstl t1, seg, sib, disp
366    sbb t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
367    stul t1, seg, sib, disp
368};
369
370def macroop SBB_LOCKED_P_I
371{
372    rdip t7
373    limm t2, imm
374    ldstl t1, seg, riprel, disp
375    sbb t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF)
376    stul t1, seg, riprel, disp
377};
378
379def macroop SBB_M_R
380{
381    ldst t1, seg, sib, disp
382    sbb t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
383    st t1, seg, sib, disp
384};
385
386def macroop SBB_P_R
387{
388    rdip t7
389    ldst t1, seg, riprel, disp
390    sbb t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
391    st t1, seg, riprel, disp
392};
393
394def macroop SBB_LOCKED_M_R
395{
396    ldstl t1, seg, sib, disp
397    sbb t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
398    stul t1, seg, sib, disp
399};
400
401def macroop SBB_LOCKED_P_R
402{
403    rdip t7
404    ldstl t1, seg, riprel, disp
405    sbb t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
406    stul t1, seg, riprel, disp
407};
408
409def macroop NEG_R
410{
411    sub reg, t0, reg, flags=(CF,OF,SF,ZF,AF,PF)
412};
413
414def macroop NEG_M
415{
416    ldst t1, seg, sib, disp
417    sub t1, t0, t1, flags=(CF,OF,SF,ZF,AF,PF)
418    st t1, seg, sib, disp
419};
420
421def macroop NEG_P
422{
423    rdip t7
424    ldst t1, seg, riprel, disp
425    sub t1, t0, t1, flags=(CF,OF,SF,ZF,AF,PF)
426    st t1, seg, riprel, disp
427};
428
429def macroop NEG_LOCKED_M
430{
431    ldstl t1, seg, sib, disp
432    sub t1, t0, t1, flags=(CF,OF,SF,ZF,AF,PF)
433    stul t1, seg, sib, disp
434};
435
436def macroop NEG_LOCKED_P
437{
438    rdip t7
439    ldstl t1, seg, riprel, disp
440    sub t1, t0, t1, flags=(CF,OF,SF,ZF,AF,PF)
441    stul t1, seg, riprel, disp
442};
443'''
444