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 OR_R_R 40{ 41 or reg, reg, regm, flags=(OF,SF,ZF,PF,CF) 42}; 43 44def macroop OR_M_I 45{ 46 limm t2, imm 47 ldst t1, seg, sib, disp 48 or t1, t1, t2, flags=(OF,SF,ZF,PF,CF) 49 st t1, seg, sib, disp 50}; 51 52def macroop OR_P_I 53{ 54 limm t2, imm 55 rdip t7 56 ldst t1, seg, riprel, disp 57 or t1, t1, t2, flags=(OF,SF,ZF,PF,CF) 58 st t1, seg, riprel, disp 59}; 60 61def macroop OR_LOCKED_M_I 62{ 63 limm t2, imm 64 mfence 65 ldstl t1, seg, sib, disp 66 or t1, t1, t2, flags=(OF,SF,ZF,PF,CF) 67 stul t1, seg, sib, disp 68 mfence 69}; 70 71def macroop OR_LOCKED_P_I 72{ 73 limm t2, imm 74 rdip t7 75 mfence 76 ldstl t1, seg, riprel, disp 77 or t1, t1, t2, flags=(OF,SF,ZF,PF,CF) 78 stul t1, seg, riprel, disp 79 mfence 80}; 81 82def macroop OR_M_R 83{ 84 ldst t1, seg, sib, disp 85 or t1, t1, reg, flags=(OF,SF,ZF,PF,CF) 86 st t1, seg, sib, disp 87}; 88 89def macroop OR_P_R 90{ 91 rdip t7 92 ldst t1, seg, riprel, disp 93 or t1, t1, reg, flags=(OF,SF,ZF,PF,CF) 94 st t1, seg, riprel, disp 95}; 96 97def macroop OR_LOCKED_M_R 98{ 99 mfence 100 ldstl t1, seg, sib, disp 101 or t1, t1, reg, flags=(OF,SF,ZF,PF,CF) 102 stul t1, seg, sib, disp 103 mfence 104}; 105 106def macroop OR_LOCKED_P_R 107{ 108 rdip t7 109 mfence 110 ldstl t1, seg, riprel, disp 111 or t1, t1, reg, flags=(OF,SF,ZF,PF,CF) 112 stul t1, seg, riprel, disp 113 mfence 114}; 115 116def macroop OR_R_M 117{ 118 ld t1, seg, sib, disp 119 or reg, reg, t1, flags=(OF,SF,ZF,PF,CF) 120}; 121 122def macroop OR_R_P 123{ 124 rdip t7 125 ld t1, seg, riprel, disp 126 or reg, reg, t1, flags=(OF,SF,ZF,PF,CF) 127}; 128 129def macroop OR_R_I 130{ 131 limm t1, imm 132 or reg, reg, t1, flags=(OF,SF,ZF,PF,CF) 133}; 134 135def macroop XOR_R_R 136{ 137 xor reg, reg, regm, flags=(OF,SF,ZF,PF,CF) 138}; 139 140def macroop XOR_R_I 141{ 142 limm t1, imm 143 xor reg, reg, t1, flags=(OF,SF,ZF,PF,CF) 144}; 145 146def macroop XOR_M_I 147{ 148 limm t2, imm 149 ldst t1, seg, sib, disp 150 xor t1, t1, t2, flags=(OF,SF,ZF,PF,CF) 151 st t1, seg, sib, disp 152}; 153 154def macroop XOR_P_I 155{ 156 limm t2, imm 157 rdip t7 158 ldst t1, seg, riprel, disp 159 xor t1, t1, t2, flags=(OF,SF,ZF,PF,CF) 160 st t1, seg, riprel, disp 161}; 162 163def macroop XOR_LOCKED_M_I 164{ 165 limm t2, imm 166 mfence 167 ldstl t1, seg, sib, disp 168 xor t1, t1, t2, flags=(OF,SF,ZF,PF,CF) 169 stul t1, seg, sib, disp 170 mfence 171}; 172 173def macroop XOR_LOCKED_P_I 174{ 175 limm t2, imm 176 rdip t7 177 mfence 178 ldstl t1, seg, riprel, disp 179 xor t1, t1, t2, flags=(OF,SF,ZF,PF,CF) 180 stul t1, seg, riprel, disp 181 mfence 182}; 183 184def macroop XOR_M_R 185{ 186 ldst t1, seg, sib, disp 187 xor t1, t1, reg, flags=(OF,SF,ZF,PF,CF) 188 st t1, seg, sib, disp 189}; 190 191def macroop XOR_P_R 192{ 193 rdip t7 194 ldst t1, seg, riprel, disp 195 xor t1, t1, reg, flags=(OF,SF,ZF,PF,CF) 196 st t1, seg, riprel, disp 197}; 198 199def macroop XOR_LOCKED_M_R 200{ 201 mfence 202 ldstl t1, seg, sib, disp 203 xor t1, t1, reg, flags=(OF,SF,ZF,PF,CF) 204 stul t1, seg, sib, disp 205 mfence 206}; 207 208def macroop XOR_LOCKED_P_R 209{ 210 rdip t7 211 mfence 212 ldstl t1, seg, riprel, disp 213 xor t1, t1, reg, flags=(OF,SF,ZF,PF,CF) 214 stul t1, seg, riprel, disp 215 mfence 216}; 217 218def macroop XOR_R_M 219{ 220 ld t1, seg, sib, disp 221 xor reg, reg, t1, flags=(OF,SF,ZF,PF,CF) 222}; 223 224def macroop XOR_R_P 225{ 226 rdip t7 227 ld t1, seg, riprel, disp 228 xor reg, reg, t1, flags=(OF,SF,ZF,PF,CF) 229}; 230 231def macroop AND_R_R 232{ 233 and reg, reg, regm, flags=(OF,SF,ZF,PF,CF) 234}; 235 236def macroop AND_R_M 237{ 238 ld t1, seg, sib, disp 239 and reg, reg, t1, flags=(OF,SF,ZF,PF,CF) 240}; 241 242def macroop AND_R_P 243{ 244 rdip t7 245 ld t1, seg, riprel, disp 246 and reg, reg, t1, flags=(OF,SF,ZF,PF,CF) 247}; 248 249def macroop AND_R_I 250{ 251 limm t1, imm 252 and reg, reg, t1, flags=(OF,SF,ZF,PF,CF) 253}; 254 255def macroop AND_M_I 256{ 257 ldst t2, seg, sib, disp 258 limm t1, imm 259 and t2, t2, t1, flags=(OF,SF,ZF,PF,CF) 260 st t2, seg, sib, disp 261}; 262 263def macroop AND_P_I 264{ 265 rdip t7 266 ldst t2, seg, riprel, disp 267 limm t1, imm 268 and t2, t2, t1, flags=(OF,SF,ZF,PF,CF) 269 st t2, seg, riprel, disp 270}; 271 272def macroop AND_LOCKED_M_I 273{ 274 mfence 275 ldstl t2, seg, sib, disp 276 limm t1, imm 277 and t2, t2, t1, flags=(OF,SF,ZF,PF,CF) 278 stul t2, seg, sib, disp 279 mfence 280}; 281 282def macroop AND_LOCKED_P_I 283{ 284 rdip t7 285 mfence 286 ldstl t2, seg, riprel, disp 287 limm t1, imm 288 and t2, t2, t1, flags=(OF,SF,ZF,PF,CF) 289 stul t2, seg, riprel, disp 290 mfence 291}; 292 293def macroop AND_M_R 294{ 295 ldst t1, seg, sib, disp 296 and t1, t1, reg, flags=(OF,SF,ZF,PF,CF) 297 st t1, seg, sib, disp 298}; 299 300def macroop AND_P_R 301{ 302 rdip t7 303 ldst t1, seg, riprel, disp 304 and t1, t1, reg, flags=(OF,SF,ZF,PF,CF) 305 st t1, seg, riprel, disp 306}; 307 308def macroop AND_LOCKED_M_R 309{ 310 mfence 311 ldstl t1, seg, sib, disp 312 and t1, t1, reg, flags=(OF,SF,ZF,PF,CF) 313 stul t1, seg, sib, disp 314 mfence 315}; 316 317def macroop AND_LOCKED_P_R 318{ 319 rdip t7 320 mfence 321 ldstl t1, seg, riprel, disp 322 and t1, t1, reg, flags=(OF,SF,ZF,PF,CF) 323 stul t1, seg, riprel, disp 324 mfence 325}; 326 327def macroop NOT_R 328{ 329 limm t1, -1 330 xor reg, reg, t1 331}; 332 333def macroop NOT_M 334{ 335 limm t1, -1 336 ldst t2, seg, sib, disp 337 xor t2, t2, t1 338 st t2, seg, sib, disp 339}; 340 341def macroop NOT_P 342{ 343 limm t1, -1 344 rdip t7 345 ldst t2, seg, riprel, disp 346 xor t2, t2, t1 347 st t2, seg, riprel, disp 348}; 349 350def macroop NOT_LOCKED_M 351{ 352 limm t1, -1 353 mfence 354 ldstl t2, seg, sib, disp 355 xor t2, t2, t1 356 stul t2, seg, sib, disp 357 mfence 358}; 359 360def macroop NOT_LOCKED_P 361{ 362 limm t1, -1 363 rdip t7 364 mfence 365 ldstl t2, seg, riprel, disp 366 xor t2, t2, t1 367 stul t2, seg, riprel, disp 368 mfence 369}; 370''' 371