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