88 and t1, regm, regm, flags=(ZF,) 89 br label("end"), flags=(CZF,) 90 91 # Zero out the result register 92 movi reg, reg, 0x0 93 94 # Bit 6 95 srli t3, t1, 32, dataSize=8, flags=(EZF,) 96 ori t4, reg, 0x20 97 mov reg, reg, t4, flags=(nCEZF,) 98 mov t1, t1, t3, flags=(nCEZF,) 99 100 # Bit 5 101 srli t3, t1, 16, dataSize=8, flags=(EZF,) 102 ori t4, reg, 0x10 103 mov reg, reg, t4, flags=(nCEZF,) 104 mov t1, t1, t3, flags=(nCEZF,) 105 106 # Bit 4 107 srli t3, t1, 8, dataSize=8, flags=(EZF,) 108 ori t4, reg, 0x8 109 mov reg, reg, t4, flags=(nCEZF,) 110 mov t1, t1, t3, flags=(nCEZF,) 111 112 # Bit 3 113 srli t3, t1, 4, dataSize=8, flags=(EZF,) 114 ori t4, reg, 0x4 115 mov reg, reg, t4, flags=(nCEZF,) 116 mov t1, t1, t3, flags=(nCEZF,) 117 118 # Bit 2 119 srli t3, t1, 2, dataSize=8, flags=(EZF,) 120 ori t4, reg, 0x2 121 mov reg, reg, t4, flags=(nCEZF,) 122 mov t1, t1, t3, flags=(nCEZF,) 123 124 # Bit 1 125 srli t3, t1, 1, dataSize=8, flags=(EZF,) 126 ori t4, reg, 0x1 127 mov reg, reg, t4, flags=(nCEZF,) 128 129end: 130 fault "NoFault" 131}; 132 133def macroop BSR_R_M { 134
|
136 ld t1, seg, sib, disp 137 138 # Determine if the input was zero, and also move it to a temp reg. 139 and t1, t1, t1, flags=(ZF,) 140 br label("end"), flags=(CZF,) 141 142 # Zero out the result register 143 movi reg, reg, 0x0 144 145 # Bit 6 146 srli t3, t1, 32, dataSize=8, flags=(EZF,) 147 ori t4, reg, 0x20 148 mov reg, reg, t4, flags=(nCEZF,) 149 mov t1, t1, t3, flags=(nCEZF,) 150 151 # Bit 5 152 srli t3, t1, 16, dataSize=8, flags=(EZF,) 153 ori t4, reg, 0x10 154 mov reg, reg, t4, flags=(nCEZF,) 155 mov t1, t1, t3, flags=(nCEZF,) 156 157 # Bit 4 158 srli t3, t1, 8, dataSize=8, flags=(EZF,) 159 ori t4, reg, 0x8 160 mov reg, reg, t4, flags=(nCEZF,) 161 mov t1, t1, t3, flags=(nCEZF,) 162 163 # Bit 3 164 srli t3, t1, 4, dataSize=8, flags=(EZF,) 165 ori t4, reg, 0x4 166 mov reg, reg, t4, flags=(nCEZF,) 167 mov t1, t1, t3, flags=(nCEZF,) 168 169 # Bit 2 170 srli t3, t1, 2, dataSize=8, flags=(EZF,) 171 ori t4, reg, 0x2 172 mov reg, reg, t4, flags=(nCEZF,) 173 mov t1, t1, t3, flags=(nCEZF,) 174 175 # Bit 1 176 srli t3, t1, 1, dataSize=8, flags=(EZF,) 177 ori t4, reg, 0x1 178 mov reg, reg, t4, flags=(nCEZF,) 179 180end: 181 fault "NoFault" 182}; 183 184def macroop BSR_R_P { 185 186 rdip t7
|
188 ld t1, seg, riprel, disp 189 190 # Determine if the input was zero, and also move it to a temp reg. 191 and t1, t1, t1, flags=(ZF,) 192 br label("end"), flags=(CZF,) 193 194 # Zero out the result register 195 movi reg, reg, 0x0 196 197 # Bit 6 198 srli t3, t1, 32, dataSize=8, flags=(EZF,) 199 ori t4, reg, 0x20 200 mov reg, reg, t4, flags=(nCEZF,) 201 mov t1, t1, t3, flags=(nCEZF,) 202 203 # Bit 5 204 srli t3, t1, 16, dataSize=8, flags=(EZF,) 205 ori t4, reg, 0x10 206 mov reg, reg, t4, flags=(nCEZF,) 207 mov t1, t1, t3, flags=(nCEZF,) 208 209 # Bit 4 210 srli t3, t1, 8, dataSize=8, flags=(EZF,) 211 ori t4, reg, 0x8 212 mov reg, reg, t4, flags=(nCEZF,) 213 mov t1, t1, t3, flags=(nCEZF,) 214 215 # Bit 3 216 srli t3, t1, 4, dataSize=8, flags=(EZF,) 217 ori t4, reg, 0x4 218 mov reg, reg, t4, flags=(nCEZF,) 219 mov t1, t1, t3, flags=(nCEZF,) 220 221 # Bit 2 222 srli t3, t1, 2, dataSize=8, flags=(EZF,) 223 ori t4, reg, 0x2 224 mov reg, reg, t4, flags=(nCEZF,) 225 mov t1, t1, t3, flags=(nCEZF,) 226 227 # Bit 1 228 srli t3, t1, 1, dataSize=8, flags=(EZF,) 229 ori t4, reg, 0x1 230 mov reg, reg, t4, flags=(nCEZF,) 231 232end: 233 fault "NoFault" 234}; 235 236def macroop BSF_R_R { 237 # Determine if the input was zero, and also move it to a temp reg. 238 mov t1, t1, t0, dataSize=8 239 and t1, regm, regm, flags=(ZF,) 240 br label("end"), flags=(CZF,) 241 242 # Zero out the result register 243 movi reg, reg, 0 244 245 subi t2, t1, 1 246 xor t1, t2, t1 247 248 249 # Bit 6 250 srli t3, t1, 32, dataSize=8, flags=(EZF,) 251 ori t4, reg, 32 252 mov reg, reg, t4, flags=(nCEZF,) 253 mov t1, t1, t3, flags=(nCEZF,) 254 255 # Bit 5 256 srli t3, t1, 16, dataSize=8, flags=(EZF,) 257 ori t4, reg, 16 258 mov reg, reg, t4, flags=(nCEZF,) 259 mov t1, t1, t3, flags=(nCEZF,) 260 261 # Bit 4 262 srli t3, t1, 8, dataSize=8, flags=(EZF,) 263 ori t4, reg, 8 264 mov reg, reg, t4, flags=(nCEZF,) 265 mov t1, t1, t3, flags=(nCEZF,) 266 267 # Bit 3 268 srli t3, t1, 4, dataSize=8, flags=(EZF,) 269 ori t4, reg, 4 270 mov reg, reg, t4, flags=(nCEZF,) 271 mov t1, t1, t3, flags=(nCEZF,) 272 273 # Bit 2 274 srli t3, t1, 2, dataSize=8, flags=(EZF,) 275 ori t4, reg, 2 276 mov reg, reg, t4, flags=(nCEZF,) 277 mov t1, t1, t3, flags=(nCEZF,) 278 279 # Bit 1 280 srli t3, t1, 1, dataSize=8, flags=(EZF,) 281 ori t4, reg, 1 282 mov reg, reg, t4, flags=(nCEZF,) 283 284end: 285 fault "NoFault" 286}; 287 288def macroop BSF_R_M { 289 290 mov t1, t1, t0, dataSize=8 291 ld t1, seg, sib, disp 292 293 # Determine if the input was zero, and also move it to a temp reg. 294 and t1, t1, t1, flags=(ZF,) 295 br label("end"), flags=(CZF,) 296 297 # Zero out the result register 298 mov reg, reg, t0 299 300 subi t2, t1, 1 301 xor t1, t2, t1 302 303 # Bit 6 304 srli t3, t1, 32, dataSize=8, flags=(EZF,) 305 ori t4, reg, 32 306 mov reg, reg, t4, flags=(nCEZF,) 307 mov t1, t1, t3, flags=(nCEZF,) 308 309 # Bit 5 310 srli t3, t1, 16, dataSize=8, flags=(EZF,) 311 ori t4, reg, 16 312 mov reg, reg, t4, flags=(nCEZF,) 313 mov t1, t1, t3, flags=(nCEZF,) 314 315 # Bit 4 316 srli t3, t1, 8, dataSize=8, flags=(EZF,) 317 ori t4, reg, 8 318 mov reg, reg, t4, flags=(nCEZF,) 319 mov t1, t1, t3, flags=(nCEZF,) 320 321 # Bit 3 322 srli t3, t1, 4, dataSize=8, flags=(EZF,) 323 ori t4, reg, 4 324 mov reg, reg, t4, flags=(nCEZF,) 325 mov t1, t1, t3, flags=(nCEZF,) 326 327 # Bit 2 328 srli t3, t1, 2, dataSize=8, flags=(EZF,) 329 ori t4, reg, 2 330 mov reg, reg, t4, flags=(nCEZF,) 331 mov t1, t1, t3, flags=(nCEZF,) 332 333 # Bit 1 334 srli t3, t1, 1, dataSize=8, flags=(EZF,) 335 ori t4, reg, 1 336 mov reg, reg, t4, flags=(nCEZF,) 337 mov t1, t1, t3, flags=(nCEZF,) 338 339end: 340 fault "NoFault" 341}; 342 343def macroop BSF_R_P { 344 345 rdip t7 346 mov t1, t1, t0, dataSize=8 347 ld t1, seg, riprel, disp 348 349 # Determine if the input was zero, and also move it to a temp reg. 350 and t1, t1, t1, flags=(ZF,) 351 br label("end"), flags=(CZF,) 352 353 # Zero out the result register 354 mov reg, reg, t0 355 356 subi t2, t1, 1 357 xor t1, t2, t1 358 359 # Bit 6 360 srli t3, t1, 32, dataSize=8, flags=(EZF,) 361 ori t4, reg, 32 362 mov reg, reg, t4, flags=(nCEZF,) 363 mov t1, t1, t3, flags=(nCEZF,) 364 365 # Bit 5 366 srli t3, t1, 16, dataSize=8, flags=(EZF,) 367 ori t4, reg, 16 368 mov reg, reg, t4, flags=(nCEZF,) 369 mov t1, t1, t3, flags=(nCEZF,) 370 371 # Bit 4 372 srli t3, t1, 8, dataSize=8, flags=(EZF,) 373 ori t4, reg, 8 374 mov reg, reg, t4, flags=(nCEZF,) 375 mov t1, t1, t3, flags=(nCEZF,) 376 377 # Bit 3 378 srli t3, t1, 4, dataSize=8, flags=(EZF,) 379 ori t4, reg, 4 380 mov reg, reg, t4, flags=(nCEZF,) 381 mov t1, t1, t3, flags=(nCEZF,) 382 383 # Bit 2 384 srli t3, t1, 2, dataSize=8, flags=(EZF,) 385 ori t4, reg, 2 386 mov reg, reg, t4, flags=(nCEZF,) 387 mov t1, t1, t3, flags=(nCEZF,) 388 389 # Bit 1 390 srli t3, t1, 1, dataSize=8, flags=(EZF,) 391 ori t4, reg, 1 392 mov reg, reg, t4, flags=(nCEZF,) 393 mov t1, t1, t3, flags=(nCEZF,) 394 395end: 396 fault "NoFault" 397}; 398'''
|