add_and_subtract.py revision 6090:80d7669e9cdb
1# Copyright (c) 2007 The Hewlett-Packard Development Company 2# All rights reserved. 3# 4# Redistribution and use of this software in source and binary forms, 5# with or without modification, are permitted provided that the 6# following conditions are met: 7# 8# The software must be used only for Non-Commercial Use which means any 9# use which is NOT directed to receiving any direct monetary 10# compensation for, or commercial advantage from such use. Illustrative 11# examples of non-commercial use are academic research, personal study, 12# teaching, education and corporate research & development. 13# Illustrative examples of commercial use are distributing products for 14# commercial advantage and providing services using the software for 15# commercial advantage. 16# 17# If you wish to use this software or functionality therein that may be 18# covered by patents for commercial use, please contact: 19# Director of Intellectual Property Licensing 20# Office of Strategy and Technology 21# Hewlett-Packard Company 22# 1501 Page Mill Road 23# Palo Alto, California 94304 24# 25# Redistributions of source code must retain the above copyright notice, 26# this list of conditions and the following disclaimer. Redistributions 27# in binary form must reproduce the above copyright notice, this list of 28# conditions and the following disclaimer in the documentation and/or 29# other materials provided with the distribution. Neither the name of 30# the COPYRIGHT HOLDER(s), HEWLETT-PACKARD COMPANY, nor the names of its 31# contributors may be used to endorse or promote products derived from 32# this software without specific prior written permission. No right of 33# sublicense is granted herewith. Derivatives of the software and 34# output created using the software may be prepared, but only for 35# Non-Commercial Uses. Derivatives of the software may be shared with 36# others provided: (i) the others agree to abide by the list of 37# conditions herein which includes the Non-Commercial Use restrictions; 38# and (ii) such Derivatives of the software include the above copyright 39# notice to acknowledge the contribution from this software where 40# applicable, this list of conditions and the disclaimer below. 41# 42# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 43# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 44# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 45# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 46# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 47# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 48# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 49# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 50# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 51# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 52# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 53# 54# Authors: Gabe Black 55 56microcode = ''' 57def macroop ADD_R_R 58{ 59 add reg, reg, regm, flags=(OF,SF,ZF,AF,PF,CF) 60}; 61 62def macroop ADD_R_I 63{ 64 limm t1, imm 65 add reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF) 66}; 67 68def macroop ADD_M_I 69{ 70 limm t2, imm 71 ldst t1, seg, sib, disp 72 add t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 73 st t1, seg, sib, disp 74}; 75 76def macroop ADD_P_I 77{ 78 rdip t7 79 limm t2, imm 80 ldst t1, seg, riprel, disp 81 add t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 82 st t1, seg, riprel, disp 83}; 84 85def macroop ADD_LOCKED_M_I 86{ 87 limm t2, imm 88 ldstl t1, seg, sib, disp 89 add t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 90 stul t1, seg, sib, disp 91}; 92 93def macroop ADD_LOCKED_P_I 94{ 95 rdip t7 96 limm t2, imm 97 ldstl t1, seg, riprel, disp 98 add t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 99 stul t1, seg, riprel, disp 100}; 101 102def macroop ADD_M_R 103{ 104 ldst t1, seg, sib, disp 105 add t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 106 st t1, seg, sib, disp 107}; 108 109def macroop ADD_P_R 110{ 111 rdip t7 112 ldst t1, seg, riprel, disp 113 add t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 114 st t1, seg, riprel, disp 115}; 116 117def macroop ADD_LOCKED_M_R 118{ 119 ldstl t1, seg, sib, disp 120 add t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 121 stul t1, seg, sib, disp 122}; 123 124def macroop ADD_LOCKED_P_R 125{ 126 rdip t7 127 ldstl t1, seg, riprel, disp 128 add t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 129 stul t1, seg, riprel, disp 130}; 131 132def macroop ADD_R_M 133{ 134 ld t1, seg, sib, disp 135 add reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF) 136}; 137 138def macroop ADD_R_P 139{ 140 rdip t7 141 ld t1, seg, riprel, disp 142 add reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF) 143}; 144 145def macroop SUB_R_R 146{ 147 sub reg, reg, regm, flags=(OF,SF,ZF,AF,PF,CF) 148}; 149 150def macroop SUB_R_I 151{ 152 limm t1, imm 153 sub reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF) 154}; 155 156def macroop SUB_R_M 157{ 158 ld t1, seg, sib, disp 159 sub reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF) 160}; 161 162def macroop SUB_R_P 163{ 164 rdip t7 165 ld t1, seg, riprel, disp 166 sub reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF) 167}; 168 169def macroop SUB_M_I 170{ 171 limm t2, imm 172 ldst t1, seg, sib, disp 173 sub t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 174 st t1, seg, sib, disp 175}; 176 177def macroop SUB_P_I 178{ 179 rdip t7 180 limm t2, imm 181 ldst t1, seg, riprel, disp 182 sub t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 183 st t1, seg, riprel, disp 184}; 185 186def macroop SUB_LOCKED_M_I 187{ 188 limm t2, imm 189 ldstl t1, seg, sib, disp 190 sub t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 191 stul t1, seg, sib, disp 192}; 193 194def macroop SUB_LOCKED_P_I 195{ 196 rdip t7 197 limm t2, imm 198 ldstl t1, seg, riprel, disp 199 sub t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 200 stul t1, seg, riprel, disp 201}; 202 203def macroop SUB_M_R 204{ 205 ldst t1, seg, sib, disp 206 sub t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 207 st t1, seg, sib, disp 208}; 209 210def macroop SUB_P_R 211{ 212 rdip t7 213 ldst t1, seg, riprel, disp 214 sub t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 215 st t1, seg, riprel, disp 216}; 217 218def macroop SUB_LOCKED_M_R 219{ 220 ldstl t1, seg, sib, disp 221 sub t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 222 stul t1, seg, sib, disp 223}; 224 225def macroop SUB_LOCKED_P_R 226{ 227 rdip t7 228 ldstl t1, seg, riprel, disp 229 sub t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 230 stul t1, seg, riprel, disp 231}; 232 233def macroop ADC_R_R 234{ 235 adc reg, reg, regm, flags=(OF,SF,ZF,AF,PF,CF) 236}; 237 238def macroop ADC_R_I 239{ 240 limm t1, imm 241 adc reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF) 242}; 243 244def macroop ADC_M_I 245{ 246 limm t2, imm 247 ldst t1, seg, sib, disp 248 adc t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 249 st t1, seg, sib, disp 250}; 251 252def macroop ADC_P_I 253{ 254 rdip t7 255 limm t2, imm 256 ldst t1, seg, riprel, disp 257 adc t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 258 st t1, seg, riprel, disp 259}; 260 261def macroop ADC_LOCKED_M_I 262{ 263 limm t2, imm 264 ldstl t1, seg, sib, disp 265 adc t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 266 stul t1, seg, sib, disp 267}; 268 269def macroop ADC_LOCKED_P_I 270{ 271 rdip t7 272 limm t2, imm 273 ldstl t1, seg, riprel, disp 274 adc t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 275 stul t1, seg, riprel, disp 276}; 277 278def macroop ADC_M_R 279{ 280 ldst t1, seg, sib, disp 281 adc t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 282 st t1, seg, sib, disp 283}; 284 285def macroop ADC_P_R 286{ 287 rdip t7 288 ldst t1, seg, riprel, disp 289 adc t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 290 st t1, seg, riprel, disp 291}; 292 293def macroop ADC_LOCKED_M_R 294{ 295 ldstl t1, seg, sib, disp 296 adc t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 297 stul t1, seg, sib, disp 298}; 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