bit_test.py revision 7087:fb8d5786ff30
1# Copyright (c) 2007-2008 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# Copyright (c) 2008 The Regents of The University of Michigan 14# All rights reserved. 15# 16# Redistribution and use in source and binary forms, with or without 17# modification, are permitted provided that the following conditions are 18# met: redistributions of source code must retain the above copyright 19# notice, this list of conditions and the following disclaimer; 20# redistributions in binary form must reproduce the above copyright 21# notice, this list of conditions and the following disclaimer in the 22# documentation and/or other materials provided with the distribution; 23# neither the name of the copyright holders nor the names of its 24# contributors may be used to endorse or promote products derived from 25# this software without specific prior written permission. 26# 27# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 28# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 29# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 30# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 31# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 32# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 33# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 34# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 35# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 36# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 37# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 38# 39# Authors: Gabe Black 40 41microcode = ''' 42def macroop BT_R_I { 43 sexti t0, reg, imm, flags=(CF,) 44}; 45 46def macroop BT_M_I { 47 limm t1, imm, dataSize=asz 48 # This fudges just a tiny bit, but it's reasonable to expect the 49 # microcode generation logic to have the log of the various sizes 50 # floating around as well. 51 ld t1, seg, sib, disp 52 sexti t0, t1, imm, flags=(CF,) 53}; 54 55def macroop BT_P_I { 56 rdip t7 57 limm t1, imm, dataSize=asz 58 ld t1, seg, riprel, disp, dataSize=asz 59 sexti t0, t1, imm, flags=(CF,) 60}; 61 62def macroop BT_R_R { 63 sext t0, reg, regm, flags=(CF,) 64}; 65 66def macroop BT_M_R { 67 srai t2, reg, 3, dataSize=asz 68 srai t3, t2, ldsz, dataSize=asz 69 lea t3, flatseg, [dsz, t3, base], dataSize=asz 70 ld t1, seg, [scale, index, t3], disp 71 sext t0, t1, reg, flags=(CF,) 72}; 73 74def macroop BT_P_R { 75 rdip t7 76 srai t2, reg, 3, dataSize=asz 77 srai t3, t2, ldsz, dataSize=asz 78 lea t3, flatseg, [ldsz, t3, base], dataSize=asz 79 ld t1, seg, [1, t3, t7], disp 80 sext t0, t1, reg, flags=(CF,) 81}; 82 83def macroop BTC_R_I { 84 sexti t0, reg, imm, flags=(CF,) 85 limm t1, 1 86 roli t1, t1, imm 87 xor reg, reg, t1 88}; 89 90def macroop BTC_M_I { 91 limm t1, imm, dataSize=asz 92 # This fudges just a tiny bit, but it's reasonable to expect the 93 # microcode generation logic to have the log of the various sizes 94 # floating around as well. 95 limm t4, 1 96 roli t4, t4, imm 97 ldst t1, seg, sib, disp 98 sexti t0, t1, imm, flags=(CF,) 99 xor t1, t1, t4 100 st t1, seg, sib, disp 101}; 102 103def macroop BTC_P_I { 104 rdip t7, dataSize=asz 105 limm t1, imm, dataSize=asz 106 limm t4, 1 107 roli t4, t4, imm 108 ldst t1, seg, riprel, disp 109 sexti t0, t1, imm, flags=(CF,) 110 xor t1, t1, t4 111 st t1, seg, riprel, disp 112}; 113 114def macroop BTC_LOCKED_M_I { 115 limm t1, imm, dataSize=asz 116 limm t4, 1 117 roli t4, t4, imm 118 ldstl t1, seg, sib, disp 119 sexti t0, t1, imm, flags=(CF,) 120 xor t1, t1, t4 121 stul t1, seg, sib, disp 122}; 123 124def macroop BTC_LOCKED_P_I { 125 rdip t7, dataSize=asz 126 limm t1, imm, dataSize=asz 127 limm t4, 1 128 roli t4, t4, imm 129 ldstl t1, seg, riprel, disp 130 sexti t0, t1, imm, flags=(CF,) 131 xor t1, t1, t4 132 stul t1, seg, riprel, disp 133}; 134 135def macroop BTC_R_R { 136 sext t0, reg, regm, flags=(CF,) 137 limm t1, 1 138 rol t1, t1, regm 139 xor reg, reg, t1 140}; 141 142def macroop BTC_M_R { 143 srai t2, reg, 3, dataSize=asz 144 srai t3, t2, ldsz, dataSize=asz 145 lea t3, flatseg, [dsz, t3, base], dataSize=asz 146 limm t4, 1 147 rol t4, t4, reg 148 ldst t1, seg, [scale, index, t3], disp 149 sext t0, t1, reg, flags=(CF,) 150 xor t1, t1, t4 151 st t1, seg, [scale, index, t3], disp 152}; 153 154def macroop BTC_P_R { 155 rdip t7, dataSize=asz 156 srai t2, reg, 3, dataSize=asz 157 srai t3, t2, ldsz, dataSize=asz 158 lea t3, flatseg, [dsz, t3, base], dataSize=asz 159 limm t4, 1 160 rol t4, t4, reg 161 ldst t1, seg, [1, t2, t7], disp 162 sext t0, t1, reg, flags=(CF,) 163 xor t1, t1, t4 164 st t1, seg, [1, t2, t7], disp 165}; 166 167def macroop BTC_LOCKED_M_R { 168 srai t2, reg, 3, dataSize=asz 169 srai t3, t2, ldsz, dataSize=asz 170 lea t3, flatseg, [dsz, t3, base], dataSize=asz 171 limm t4, 1 172 rol t4, t4, reg 173 ldstl t1, seg, [scale, index, t3], disp 174 sext t0, t1, reg, flags=(CF,) 175 xor t1, t1, t4 176 stul t1, seg, [scale, index, t3], disp 177}; 178 179def macroop BTC_LOCKED_P_R { 180 rdip t7, dataSize=asz 181 srai t2, reg, 3, dataSize=asz 182 srai t3, t2, ldsz, dataSize=asz 183 lea t3, flatseg, [dsz, t3, base], dataSize=asz 184 limm t4, 1 185 rol t4, t4, reg 186 ldstl t1, seg, [1, t2, t7], disp 187 sext t0, t1, reg, flags=(CF,) 188 xor t1, t1, t4 189 stul t1, seg, [1, t2, t7], disp 190}; 191 192def macroop BTR_R_I { 193 sexti t0, reg, imm, flags=(CF,) 194 limm t1, "(uint64_t(-(2ULL)))" 195 roli t1, t1, imm 196 and reg, reg, t1 197}; 198 199def macroop BTR_M_I { 200 limm t1, imm, dataSize=asz 201 limm t4, "(uint64_t(-(2ULL)))" 202 roli t4, t4, imm 203 ldst t1, seg, sib, disp 204 sexti t0, t1, imm, flags=(CF,) 205 and t1, t1, t4 206 st t1, seg, sib, disp 207}; 208 209def macroop BTR_P_I { 210 rdip t7, dataSize=asz 211 limm t1, imm, dataSize=asz 212 limm t4, "(uint64_t(-(2ULL)))" 213 roli t4, t4, imm 214 ldst t1, seg, riprel, disp 215 sexti t0, t1, imm, flags=(CF,) 216 and t1, t1, t4 217 st t1, seg, riprel, disp 218}; 219 220def macroop BTR_LOCKED_M_I { 221 limm t1, imm, dataSize=asz 222 limm t4, "(uint64_t(-(2ULL)))" 223 roli t4, t4, imm 224 ldstl t1, seg, sib, disp 225 sexti t0, t1, imm, flags=(CF,) 226 and t1, t1, t4 227 stul t1, seg, sib, disp 228}; 229 230def macroop BTR_LOCKED_P_I { 231 rdip t7, dataSize=asz 232 limm t1, imm, dataSize=asz 233 limm t4, "(uint64_t(-(2ULL)))" 234 roli t4, t4, imm 235 ldstl t1, seg, riprel, disp 236 sexti t0, t1, imm, flags=(CF,) 237 and t1, t1, t4 238 stul t1, seg, riprel, disp 239}; 240 241def macroop BTR_R_R { 242 sext t0, reg, regm, flags=(CF,) 243 limm t1, "(uint64_t(-(2ULL)))" 244 rol t1, t1, regm 245 and reg, reg, t1 246}; 247 248def macroop BTR_M_R { 249 srai t2, reg, 3, dataSize=asz 250 srai t3, t2, ldsz, dataSize=asz 251 lea t3, flatseg, [dsz, t3, base], dataSize=asz 252 limm t4, "(uint64_t(-(2ULL)))" 253 rol t4, t4, reg 254 ldst t1, seg, [scale, index, t3], disp 255 sext t0, t1, reg, flags=(CF,) 256 and t1, t1, t4 257 st t1, seg, [scale, index, t3], disp 258}; 259 260def macroop BTR_P_R { 261 rdip t7, dataSize=asz 262 srai t2, reg, 3, dataSize=asz 263 srai t3, t2, ldsz, dataSize=asz 264 lea t3, flatseg, [dsz, t3, base], dataSize=asz 265 limm t4, "(uint64_t(-(2ULL)))" 266 rol t4, t4, reg 267 ldst t1, seg, [1, t3, t7], disp 268 sext t0, t1, reg, flags=(CF,) 269 and t1, t1, t4 270 st t1, seg, [1, t3, t7], disp 271}; 272 273def macroop BTR_LOCKED_M_R { 274 srai t2, reg, 3, dataSize=asz 275 srai t3, t2, ldsz, dataSize=asz 276 lea t3, flatseg, [dsz, t3, base], dataSize=asz 277 limm t4, "(uint64_t(-(2ULL)))" 278 rol t4, t4, reg 279 ldstl t1, seg, [scale, index, t3], disp 280 sext t0, t1, reg, flags=(CF,) 281 and t1, t1, t4 282 stul t1, seg, [scale, index, t3], disp 283}; 284 285def macroop BTR_LOCKED_P_R { 286 rdip t7, dataSize=asz 287 srai t2, reg, 3, dataSize=asz 288 srai t3, t2, ldsz, dataSize=asz 289 lea t3, flatseg, [dsz, t3, base], dataSize=asz 290 limm t4, "(uint64_t(-(2ULL)))" 291 rol t4, t4, reg 292 ldstl t1, seg, [1, t3, t7], disp 293 sext t0, t1, reg, flags=(CF,) 294 and t1, t1, t4 295 stul t1, seg, [1, t3, t7], disp 296}; 297 298def macroop BTS_R_I { 299 sexti t0, reg, imm, flags=(CF,) 300 limm t1, 1 301 roli t1, t1, imm 302 or reg, reg, t1 303}; 304 305def macroop BTS_M_I { 306 limm t1, imm, dataSize=asz 307 limm t4, 1 308 roli t4, t4, imm 309 ldst t1, seg, sib, disp 310 sexti t0, t1, imm, flags=(CF,) 311 or t1, t1, t4 312 st t1, seg, sib, disp 313}; 314 315def macroop BTS_P_I { 316 rdip t7, dataSize=asz 317 limm t1, imm, dataSize=asz 318 limm t4, 1 319 roli t4, t4, imm 320 ldst t1, seg, riprel, disp 321 sexti t0, t1, imm, flags=(CF,) 322 or t1, t1, t4 323 st t1, seg, riprel, disp 324}; 325 326def macroop BTS_LOCKED_M_I { 327 limm t1, imm, dataSize=asz 328 limm t4, 1 329 roli t4, t4, imm 330 ldstl t1, seg, sib, disp 331 sexti t0, t1, imm, flags=(CF,) 332 or t1, t1, t4 333 stul t1, seg, sib, disp 334}; 335 336def macroop BTS_LOCKED_P_I { 337 rdip t7, dataSize=asz 338 limm t1, imm, dataSize=asz 339 limm t4, 1 340 roli t4, t4, imm 341 ldstl t1, seg, riprel, disp 342 sexti t0, t1, imm, flags=(CF,) 343 or t1, t1, t4 344 stul t1, seg, riprel, disp 345}; 346 347def macroop BTS_R_R { 348 sext t0, reg, regm, flags=(CF,) 349 limm t1, 1 350 rol t1, t1, regm 351 or reg, reg, t1 352}; 353 354def macroop BTS_M_R { 355 srai t2, reg, 3, dataSize=asz 356 srai t3, t2, ldsz, dataSize=asz 357 lea t3, flatseg, [dsz, t3, base], dataSize=asz 358 limm t4, 1 359 rol t4, t4, reg 360 ldst t1, seg, [scale, index, t3], disp 361 sext t0, t1, reg, flags=(CF,) 362 or t1, t1, t4 363 st t1, seg, [scale, index, t3], disp 364}; 365 366def macroop BTS_P_R { 367 rdip t7, dataSize=asz 368 srai t2, reg, 3, dataSize=asz 369 srai t3, t2, ldsz, dataSize=asz 370 lea t3, flatseg, [dsz, t3, base], dataSize=asz 371 limm t4, 1 372 rol t4, t4, reg 373 ldst t1, seg, [1, t3, t7], disp 374 sext t0, t1, reg, flags=(CF,) 375 or t1, t1, t4 376 st t1, seg, [1, t3, t7], disp 377}; 378 379def macroop BTS_LOCKED_M_R { 380 srai t2, reg, 3, dataSize=asz 381 srai t3, t2, ldsz, dataSize=asz 382 lea t3, flatseg, [dsz, t3, base], dataSize=asz 383 limm t4, 1 384 rol t4, t4, reg 385 ldstl t1, seg, [scale, index, t3], disp 386 sext t0, t1, reg, flags=(CF,) 387 or t1, t1, t4 388 stul t1, seg, [scale, index, t3], disp 389}; 390 391def macroop BTS_LOCKED_P_R { 392 rdip t7, dataSize=asz 393 srai t2, reg, 3, dataSize=asz 394 srai t3, t2, ldsz, dataSize=asz 395 lea t3, flatseg, [dsz, t3, base], dataSize=asz 396 limm t4, 1 397 rol t4, t4, reg 398 ldstl t1, seg, [1, t3, t7], disp 399 sext t0, t1, reg, flags=(CF,) 400 or t1, t1, t4 401 stul t1, seg, [1, t3, t7], disp 402}; 403''' 404