1# Copyright (c) 2007 The Hewlett-Packard Development Company 2# All rights reserved. 3# 4# The license below extends only to copyright in the software and shall 5# not be construed as granting a license to any other intellectual 6# property including but not limited to intellectual property relating 7# to a hardware implementation of the functionality of the software 8# licensed hereunder. You may use the software subject to the license 9# terms below provided that you ensure that this notice is replicated 10# unmodified and in its entirety in all distributions of the software, 11# modified or unmodified, in source code or in binary form. 12# 13# Redistribution and use in source and binary forms, with or without 14# modification, are permitted provided that the following conditions are 15# met: redistributions of source code must retain the above copyright 16# notice, this list of conditions and the following disclaimer; 17# redistributions in binary form must reproduce the above copyright 18# notice, this list of conditions and the following disclaimer in the 19# documentation and/or other materials provided with the distribution; 20# neither the name of the copyright holders nor the names of its 21# contributors may be used to endorse or promote products derived from 22# this software without specific prior written permission. 23# 24# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 25# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 26# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 27# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 28# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 29# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 30# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 31# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 32# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 33# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 34# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 35# 36# Authors: Gabe Black 37 38microcode = ''' 39def macroop ADD_R_R 40{ 41 add reg, reg, regm, flags=(OF,SF,ZF,AF,PF,CF) 42}; 43 44def macroop ADD_R_I 45{ 46 limm t1, imm 47 add reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF) 48}; 49 50def macroop ADD_M_I 51{ 52 limm t2, imm 53 ldst t1, seg, sib, disp 54 add t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 55 st t1, seg, sib, disp 56}; 57 58def macroop ADD_P_I 59{ 60 rdip t7 61 limm t2, imm 62 ldst t1, seg, riprel, disp 63 add t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 64 st t1, seg, riprel, disp 65}; 66 67def macroop ADD_LOCKED_M_I 68{ 69 limm t2, imm
|
70 mfence |
71 ldstl t1, seg, sib, disp 72 add t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 73 stul t1, seg, sib, disp
|
74 mfence |
75}; 76 77def macroop ADD_LOCKED_P_I 78{ 79 rdip t7 80 limm t2, imm
|
81 mfence |
82 ldstl t1, seg, riprel, disp 83 add t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 84 stul t1, seg, riprel, disp
|
85 mfence |
86}; 87 88def macroop ADD_M_R 89{ 90 ldst t1, seg, sib, disp 91 add t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 92 st t1, seg, sib, disp 93}; 94 95def macroop ADD_P_R 96{ 97 rdip t7 98 ldst t1, seg, riprel, disp 99 add t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 100 st t1, seg, riprel, disp 101}; 102 103def macroop ADD_LOCKED_M_R 104{
|
105 mfence |
106 ldstl t1, seg, sib, disp 107 add t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 108 stul t1, seg, sib, disp
|
109 mfence |
110}; 111 112def macroop ADD_LOCKED_P_R 113{ 114 rdip t7
|
115 mfence |
116 ldstl t1, seg, riprel, disp 117 add t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 118 stul t1, seg, riprel, disp
|
119 mfence |
120}; 121 122def macroop ADD_R_M 123{ 124 ld t1, seg, sib, disp 125 add reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF) 126}; 127 128def macroop ADD_R_P 129{ 130 rdip t7 131 ld t1, seg, riprel, disp 132 add reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF) 133}; 134 135def macroop SUB_R_R 136{ 137 sub reg, reg, regm, flags=(OF,SF,ZF,AF,PF,CF) 138}; 139 140def macroop SUB_R_I 141{ 142 limm t1, imm 143 sub reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF) 144}; 145 146def macroop SUB_R_M 147{ 148 ld t1, seg, sib, disp 149 sub reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF) 150}; 151 152def macroop SUB_R_P 153{ 154 rdip t7 155 ld t1, seg, riprel, disp 156 sub reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF) 157}; 158 159def macroop SUB_M_I 160{ 161 limm t2, imm 162 ldst t1, seg, sib, disp 163 sub t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 164 st t1, seg, sib, disp 165}; 166 167def macroop SUB_P_I 168{ 169 rdip t7 170 limm t2, imm 171 ldst t1, seg, riprel, disp 172 sub t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 173 st t1, seg, riprel, disp 174}; 175 176def macroop SUB_LOCKED_M_I 177{ 178 limm t2, imm
|
179 mfence |
180 ldstl t1, seg, sib, disp 181 sub t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 182 stul t1, seg, sib, disp
|
183 mfence |
184}; 185 186def macroop SUB_LOCKED_P_I 187{ 188 rdip t7 189 limm t2, imm
|
190 mfence |
191 ldstl t1, seg, riprel, disp 192 sub t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 193 stul t1, seg, riprel, disp
|
194 mfence |
195}; 196 197def macroop SUB_M_R 198{ 199 ldst t1, seg, sib, disp 200 sub t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 201 st t1, seg, sib, disp 202}; 203 204def macroop SUB_P_R 205{ 206 rdip t7 207 ldst t1, seg, riprel, disp 208 sub t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 209 st t1, seg, riprel, disp 210}; 211 212def macroop SUB_LOCKED_M_R 213{
|
214 mfence |
215 ldstl t1, seg, sib, disp 216 sub t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 217 stul t1, seg, sib, disp
|
218 mfence |
219}; 220 221def macroop SUB_LOCKED_P_R 222{ 223 rdip t7
|
224 mfence |
225 ldstl t1, seg, riprel, disp 226 sub t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 227 stul t1, seg, riprel, disp
|
228 mfence |
229}; 230 231def macroop ADC_R_R 232{ 233 adc reg, reg, regm, flags=(OF,SF,ZF,AF,PF,CF) 234}; 235 236def macroop ADC_R_I 237{ 238 limm t1, imm 239 adc reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF) 240}; 241 242def macroop ADC_M_I 243{ 244 limm t2, imm 245 ldst t1, seg, sib, disp 246 adc t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 247 st t1, seg, sib, disp 248}; 249 250def macroop ADC_P_I 251{ 252 rdip t7 253 limm t2, imm 254 ldst t1, seg, riprel, disp 255 adc t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 256 st t1, seg, riprel, disp 257}; 258 259def macroop ADC_LOCKED_M_I 260{ 261 limm t2, imm
|
262 mfence |
263 ldstl t1, seg, sib, disp 264 adc t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 265 stul t1, seg, sib, disp
|
266 mfence |
267}; 268 269def macroop ADC_LOCKED_P_I 270{ 271 rdip t7 272 limm t2, imm
|
273 mfence |
274 ldstl t1, seg, riprel, disp 275 adc t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 276 stul t1, seg, riprel, disp
|
277 mfence |
278}; 279 280def macroop ADC_M_R 281{ 282 ldst t1, seg, sib, disp 283 adc t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 284 st t1, seg, sib, disp 285}; 286 287def macroop ADC_P_R 288{ 289 rdip t7 290 ldst t1, seg, riprel, disp 291 adc t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 292 st t1, seg, riprel, disp 293}; 294 295def macroop ADC_LOCKED_M_R 296{
|
297 mfence |
298 ldstl t1, seg, sib, disp 299 adc t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 300 stul t1, seg, sib, disp
|
301 mfence |
302}; 303 304def macroop ADC_LOCKED_P_R 305{ 306 rdip t7
|
307 mfence |
308 ldstl t1, seg, riprel, disp 309 adc t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 310 stul t1, seg, riprel, disp
|
311 mfence |
312}; 313 314def macroop ADC_R_M 315{ 316 ld t1, seg, sib, disp 317 adc reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF) 318}; 319 320def macroop ADC_R_P 321{ 322 rdip t7 323 ld t1, seg, riprel, disp 324 adc reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF) 325}; 326 327def macroop SBB_R_R 328{ 329 sbb reg, reg, regm, flags=(OF,SF,ZF,AF,PF,CF) 330}; 331 332def macroop SBB_R_I 333{ 334 limm t1, imm 335 sbb reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF) 336}; 337 338def macroop SBB_R_M 339{ 340 ld t1, seg, sib, disp 341 sbb reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF) 342}; 343 344def macroop SBB_R_P 345{ 346 rdip t7 347 ld t1, seg, riprel, disp 348 sbb reg, reg, t1, flags=(OF,SF,ZF,AF,PF,CF) 349}; 350 351def macroop SBB_M_I 352{ 353 limm t2, imm 354 ldst t1, seg, sib, disp 355 sbb t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 356 st t1, seg, sib, disp 357}; 358 359def macroop SBB_P_I 360{ 361 rdip t7 362 limm t2, imm 363 ldst t1, seg, riprel, disp 364 sbb t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 365 st t1, seg, riprel, disp 366}; 367 368def macroop SBB_LOCKED_M_I 369{ 370 limm t2, imm
|
371 mfence |
372 ldstl t1, seg, sib, disp 373 sbb t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 374 stul t1, seg, sib, disp
|
375 mfence |
376}; 377 378def macroop SBB_LOCKED_P_I 379{ 380 rdip t7 381 limm t2, imm
|
382 mfence |
383 ldstl t1, seg, riprel, disp 384 sbb t1, t1, t2, flags=(OF,SF,ZF,AF,PF,CF) 385 stul t1, seg, riprel, disp
|
386 mfence |
387}; 388 389def macroop SBB_M_R 390{ 391 ldst t1, seg, sib, disp 392 sbb t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 393 st t1, seg, sib, disp 394}; 395 396def macroop SBB_P_R 397{ 398 rdip t7 399 ldst t1, seg, riprel, disp 400 sbb t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 401 st t1, seg, riprel, disp 402}; 403 404def macroop SBB_LOCKED_M_R 405{
|
406 mfence |
407 ldstl t1, seg, sib, disp 408 sbb t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 409 stul t1, seg, sib, disp
|
410 mfence |
411}; 412 413def macroop SBB_LOCKED_P_R 414{ 415 rdip t7
|
416 mfence |
417 ldstl t1, seg, riprel, disp 418 sbb t1, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 419 stul t1, seg, riprel, disp
|
420 mfence |
421}; 422 423def macroop NEG_R 424{ 425 sub reg, t0, reg, flags=(CF,OF,SF,ZF,AF,PF) 426}; 427 428def macroop NEG_M 429{ 430 ldst t1, seg, sib, disp 431 sub t1, t0, t1, flags=(CF,OF,SF,ZF,AF,PF) 432 st t1, seg, sib, disp 433}; 434 435def macroop NEG_P 436{ 437 rdip t7 438 ldst t1, seg, riprel, disp 439 sub t1, t0, t1, flags=(CF,OF,SF,ZF,AF,PF) 440 st t1, seg, riprel, disp 441}; 442 443def macroop NEG_LOCKED_M 444{
|
445 mfence |
446 ldstl t1, seg, sib, disp 447 sub t1, t0, t1, flags=(CF,OF,SF,ZF,AF,PF) 448 stul t1, seg, sib, disp
|
449 mfence |
450}; 451 452def macroop NEG_LOCKED_P 453{ 454 rdip t7
|
455 mfence |
456 ldstl t1, seg, riprel, disp 457 sub t1, t0, t1, flags=(CF,OF,SF,ZF,AF,PF) 458 stul t1, seg, riprel, disp
|
459 mfence |
460}; 461'''
|