data.isa (8305:a624d67b642c) data.isa (8588:ef28ed90449d)
1// -*- mode:c++ -*-
2
3// Copyright (c) 2010 ARM Limited
4// All rights reserved
5//
6// The license below extends only to copyright in the software and shall
7// not be construed as granting a license to any other intellectual
8// property including but not limited to intellectual property relating

--- 288 unchanged lines hidden (view full) ---

297 buildDataInst("bic", "Dest = resTemp = Op1 & ~secondOp;")
298 buildDataInst("mvn", "Dest = resTemp = ~secondOp;")
299 buildDataInst("movt",
300 "Dest = resTemp = insertBits(Op1, 31, 16, secondOp);",
301 aiw = False)
302
303 buildRegDataInst("qadd", '''
304 int32_t midRes;
1// -*- mode:c++ -*-
2
3// Copyright (c) 2010 ARM Limited
4// All rights reserved
5//
6// The license below extends only to copyright in the software and shall
7// not be construed as granting a license to any other intellectual
8// property including but not limited to intellectual property relating

--- 288 unchanged lines hidden (view full) ---

297 buildDataInst("bic", "Dest = resTemp = Op1 & ~secondOp;")
298 buildDataInst("mvn", "Dest = resTemp = ~secondOp;")
299 buildDataInst("movt",
300 "Dest = resTemp = insertBits(Op1, 31, 16, secondOp);",
301 aiw = False)
302
303 buildRegDataInst("qadd", '''
304 int32_t midRes;
305 resTemp = saturateOp<32>(midRes, Op1.sw, Op2.sw);
305 resTemp = saturateOp<32>(midRes, Op1_sw, Op2_sw);
306 Dest = midRes;
307 ''', flagType="saturate", buildNonCc=False)
308 buildRegDataInst("qadd16", '''
309 int32_t midRes;
310 for (unsigned i = 0; i < 2; i++) {
311 int high = (i + 1) * 16 - 1;
312 int low = i * 16;
306 Dest = midRes;
307 ''', flagType="saturate", buildNonCc=False)
308 buildRegDataInst("qadd16", '''
309 int32_t midRes;
310 for (unsigned i = 0; i < 2; i++) {
311 int high = (i + 1) * 16 - 1;
312 int low = i * 16;
313 int64_t arg1 = sext<16>(bits(Op1.sw, high, low));
314 int64_t arg2 = sext<16>(bits(Op2.sw, high, low));
313 int64_t arg1 = sext<16>(bits(Op1_sw, high, low));
314 int64_t arg2 = sext<16>(bits(Op2_sw, high, low));
315 saturateOp<16>(midRes, arg1, arg2);
316 replaceBits(resTemp, high, low, midRes);
317 }
318 Dest = resTemp;
319 ''', flagType="none", buildCc=False)
320 buildRegDataInst("qadd8", '''
321 int32_t midRes;
322 for (unsigned i = 0; i < 4; i++) {
323 int high = (i + 1) * 8 - 1;
324 int low = i * 8;
315 saturateOp<16>(midRes, arg1, arg2);
316 replaceBits(resTemp, high, low, midRes);
317 }
318 Dest = resTemp;
319 ''', flagType="none", buildCc=False)
320 buildRegDataInst("qadd8", '''
321 int32_t midRes;
322 for (unsigned i = 0; i < 4; i++) {
323 int high = (i + 1) * 8 - 1;
324 int low = i * 8;
325 int64_t arg1 = sext<8>(bits(Op1.sw, high, low));
326 int64_t arg2 = sext<8>(bits(Op2.sw, high, low));
325 int64_t arg1 = sext<8>(bits(Op1_sw, high, low));
326 int64_t arg2 = sext<8>(bits(Op2_sw, high, low));
327 saturateOp<8>(midRes, arg1, arg2);
328 replaceBits(resTemp, high, low, midRes);
329 }
330 Dest = resTemp;
331 ''', flagType="none", buildCc=False)
332 buildRegDataInst("qdadd", '''
333 int32_t midRes;
327 saturateOp<8>(midRes, arg1, arg2);
328 replaceBits(resTemp, high, low, midRes);
329 }
330 Dest = resTemp;
331 ''', flagType="none", buildCc=False)
332 buildRegDataInst("qdadd", '''
333 int32_t midRes;
334 resTemp = saturateOp<32>(midRes, Op2.sw, Op2.sw) |
335 saturateOp<32>(midRes, Op1.sw, midRes);
334 resTemp = saturateOp<32>(midRes, Op2_sw, Op2_sw) |
335 saturateOp<32>(midRes, Op1_sw, midRes);
336 Dest = midRes;
337 ''', flagType="saturate", buildNonCc=False)
338 buildRegDataInst("qsub", '''
339 int32_t midRes;
336 Dest = midRes;
337 ''', flagType="saturate", buildNonCc=False)
338 buildRegDataInst("qsub", '''
339 int32_t midRes;
340 resTemp = saturateOp<32>(midRes, Op1.sw, Op2.sw, true);
340 resTemp = saturateOp<32>(midRes, Op1_sw, Op2_sw, true);
341 Dest = midRes;
342 ''', flagType="saturate")
343 buildRegDataInst("qsub16", '''
344 int32_t midRes;
345 for (unsigned i = 0; i < 2; i++) {
346 int high = (i + 1) * 16 - 1;
347 int low = i * 16;
341 Dest = midRes;
342 ''', flagType="saturate")
343 buildRegDataInst("qsub16", '''
344 int32_t midRes;
345 for (unsigned i = 0; i < 2; i++) {
346 int high = (i + 1) * 16 - 1;
347 int low = i * 16;
348 int64_t arg1 = sext<16>(bits(Op1.sw, high, low));
349 int64_t arg2 = sext<16>(bits(Op2.sw, high, low));
348 int64_t arg1 = sext<16>(bits(Op1_sw, high, low));
349 int64_t arg2 = sext<16>(bits(Op2_sw, high, low));
350 saturateOp<16>(midRes, arg1, arg2, true);
351 replaceBits(resTemp, high, low, midRes);
352 }
353 Dest = resTemp;
354 ''', flagType="none", buildCc=False)
355 buildRegDataInst("qsub8", '''
356 int32_t midRes;
357 for (unsigned i = 0; i < 4; i++) {
358 int high = (i + 1) * 8 - 1;
359 int low = i * 8;
350 saturateOp<16>(midRes, arg1, arg2, true);
351 replaceBits(resTemp, high, low, midRes);
352 }
353 Dest = resTemp;
354 ''', flagType="none", buildCc=False)
355 buildRegDataInst("qsub8", '''
356 int32_t midRes;
357 for (unsigned i = 0; i < 4; i++) {
358 int high = (i + 1) * 8 - 1;
359 int low = i * 8;
360 int64_t arg1 = sext<8>(bits(Op1.sw, high, low));
361 int64_t arg2 = sext<8>(bits(Op2.sw, high, low));
360 int64_t arg1 = sext<8>(bits(Op1_sw, high, low));
361 int64_t arg2 = sext<8>(bits(Op2_sw, high, low));
362 saturateOp<8>(midRes, arg1, arg2, true);
363 replaceBits(resTemp, high, low, midRes);
364 }
365 Dest = resTemp;
366 ''', flagType="none", buildCc=False)
367 buildRegDataInst("qdsub", '''
368 int32_t midRes;
362 saturateOp<8>(midRes, arg1, arg2, true);
363 replaceBits(resTemp, high, low, midRes);
364 }
365 Dest = resTemp;
366 ''', flagType="none", buildCc=False)
367 buildRegDataInst("qdsub", '''
368 int32_t midRes;
369 resTemp = saturateOp<32>(midRes, Op2.sw, Op2.sw) |
370 saturateOp<32>(midRes, Op1.sw, midRes, true);
369 resTemp = saturateOp<32>(midRes, Op2_sw, Op2_sw) |
370 saturateOp<32>(midRes, Op1_sw, midRes, true);
371 Dest = midRes;
372 ''', flagType="saturate", buildNonCc=False)
373 buildRegDataInst("qasx", '''
374 int32_t midRes;
371 Dest = midRes;
372 ''', flagType="saturate", buildNonCc=False)
373 buildRegDataInst("qasx", '''
374 int32_t midRes;
375 int64_t arg1Low = sext<16>(bits(Op1.sw, 15, 0));
376 int64_t arg1High = sext<16>(bits(Op1.sw, 31, 16));
377 int64_t arg2Low = sext<16>(bits(Op2.sw, 15, 0));
378 int64_t arg2High = sext<16>(bits(Op2.sw, 31, 16));
375 int64_t arg1Low = sext<16>(bits(Op1_sw, 15, 0));
376 int64_t arg1High = sext<16>(bits(Op1_sw, 31, 16));
377 int64_t arg2Low = sext<16>(bits(Op2_sw, 15, 0));
378 int64_t arg2High = sext<16>(bits(Op2_sw, 31, 16));
379 saturateOp<16>(midRes, arg1Low, arg2High, true);
380 replaceBits(resTemp, 15, 0, midRes);
381 saturateOp<16>(midRes, arg1High, arg2Low);
382 replaceBits(resTemp, 31, 16, midRes);
383 Dest = resTemp;
384 ''', flagType="none", buildCc=False)
385 buildRegDataInst("qsax", '''
386 int32_t midRes;
379 saturateOp<16>(midRes, arg1Low, arg2High, true);
380 replaceBits(resTemp, 15, 0, midRes);
381 saturateOp<16>(midRes, arg1High, arg2Low);
382 replaceBits(resTemp, 31, 16, midRes);
383 Dest = resTemp;
384 ''', flagType="none", buildCc=False)
385 buildRegDataInst("qsax", '''
386 int32_t midRes;
387 int64_t arg1Low = sext<16>(bits(Op1.sw, 15, 0));
388 int64_t arg1High = sext<16>(bits(Op1.sw, 31, 16));
389 int64_t arg2Low = sext<16>(bits(Op2.sw, 15, 0));
390 int64_t arg2High = sext<16>(bits(Op2.sw, 31, 16));
387 int64_t arg1Low = sext<16>(bits(Op1_sw, 15, 0));
388 int64_t arg1High = sext<16>(bits(Op1_sw, 31, 16));
389 int64_t arg2Low = sext<16>(bits(Op2_sw, 15, 0));
390 int64_t arg2High = sext<16>(bits(Op2_sw, 31, 16));
391 saturateOp<16>(midRes, arg1Low, arg2High);
392 replaceBits(resTemp, 15, 0, midRes);
393 saturateOp<16>(midRes, arg1High, arg2Low, true);
394 replaceBits(resTemp, 31, 16, midRes);
395 Dest = resTemp;
396 ''', flagType="none", buildCc=False)
397
398 buildRegDataInst("sadd8", '''
399 uint32_t geBits = 0;
400 resTemp = 0;
401 for (unsigned i = 0; i < 4; i++) {
402 int high = (i + 1) * 8 - 1;
403 int low = i * 8;
391 saturateOp<16>(midRes, arg1Low, arg2High);
392 replaceBits(resTemp, 15, 0, midRes);
393 saturateOp<16>(midRes, arg1High, arg2Low, true);
394 replaceBits(resTemp, 31, 16, midRes);
395 Dest = resTemp;
396 ''', flagType="none", buildCc=False)
397
398 buildRegDataInst("sadd8", '''
399 uint32_t geBits = 0;
400 resTemp = 0;
401 for (unsigned i = 0; i < 4; i++) {
402 int high = (i + 1) * 8 - 1;
403 int low = i * 8;
404 int32_t midRes = sext<8>(bits(Op1.sw, high, low)) +
405 sext<8>(bits(Op2.sw, high, low));
404 int32_t midRes = sext<8>(bits(Op1_sw, high, low)) +
405 sext<8>(bits(Op2_sw, high, low));
406 replaceBits(resTemp, high, low, midRes);
407 if (midRes >= 0) {
408 geBits = geBits | (1 << i);
409 }
410 }
411 Dest = resTemp;
412 resTemp = geBits;
413 ''', flagType="ge", buildNonCc=False)
414 buildRegDataInst("sadd16", '''
415 uint32_t geBits = 0;
416 resTemp = 0;
417 for (unsigned i = 0; i < 2; i++) {
418 int high = (i + 1) * 16 - 1;
419 int low = i * 16;
406 replaceBits(resTemp, high, low, midRes);
407 if (midRes >= 0) {
408 geBits = geBits | (1 << i);
409 }
410 }
411 Dest = resTemp;
412 resTemp = geBits;
413 ''', flagType="ge", buildNonCc=False)
414 buildRegDataInst("sadd16", '''
415 uint32_t geBits = 0;
416 resTemp = 0;
417 for (unsigned i = 0; i < 2; i++) {
418 int high = (i + 1) * 16 - 1;
419 int low = i * 16;
420 int32_t midRes = sext<16>(bits(Op1.sw, high, low)) +
421 sext<16>(bits(Op2.sw, high, low));
420 int32_t midRes = sext<16>(bits(Op1_sw, high, low)) +
421 sext<16>(bits(Op2_sw, high, low));
422 replaceBits(resTemp, high, low, midRes);
423 if (midRes >= 0) {
424 geBits = geBits | (0x3 << (i * 2));
425 }
426 }
427 Dest = resTemp;
428 resTemp = geBits;
429 ''', flagType="ge", buildNonCc=False)
430
431 buildRegDataInst("ssub8", '''
432 uint32_t geBits = 0;
433 resTemp = 0;
434 for (unsigned i = 0; i < 4; i++) {
435 int high = (i + 1) * 8 - 1;
436 int low = i * 8;
422 replaceBits(resTemp, high, low, midRes);
423 if (midRes >= 0) {
424 geBits = geBits | (0x3 << (i * 2));
425 }
426 }
427 Dest = resTemp;
428 resTemp = geBits;
429 ''', flagType="ge", buildNonCc=False)
430
431 buildRegDataInst("ssub8", '''
432 uint32_t geBits = 0;
433 resTemp = 0;
434 for (unsigned i = 0; i < 4; i++) {
435 int high = (i + 1) * 8 - 1;
436 int low = i * 8;
437 int32_t midRes = sext<8>(bits(Op1.sw, high, low)) -
438 sext<8>(bits(Op2.sw, high, low));
437 int32_t midRes = sext<8>(bits(Op1_sw, high, low)) -
438 sext<8>(bits(Op2_sw, high, low));
439 replaceBits(resTemp, high, low, midRes);
440 if (midRes >= 0) {
441 geBits = geBits | (1 << i);
442 }
443 }
444 Dest = resTemp;
445 resTemp = geBits;
446 ''', flagType="ge", buildNonCc=False)
447 buildRegDataInst("ssub16", '''
448 uint32_t geBits = 0;
449 resTemp = 0;
450 for (unsigned i = 0; i < 2; i++) {
451 int high = (i + 1) * 16 - 1;
452 int low = i * 16;
439 replaceBits(resTemp, high, low, midRes);
440 if (midRes >= 0) {
441 geBits = geBits | (1 << i);
442 }
443 }
444 Dest = resTemp;
445 resTemp = geBits;
446 ''', flagType="ge", buildNonCc=False)
447 buildRegDataInst("ssub16", '''
448 uint32_t geBits = 0;
449 resTemp = 0;
450 for (unsigned i = 0; i < 2; i++) {
451 int high = (i + 1) * 16 - 1;
452 int low = i * 16;
453 int32_t midRes = sext<16>(bits(Op1.sw, high, low)) -
454 sext<16>(bits(Op2.sw, high, low));
453 int32_t midRes = sext<16>(bits(Op1_sw, high, low)) -
454 sext<16>(bits(Op2_sw, high, low));
455 replaceBits(resTemp, high, low, midRes);
456 if (midRes >= 0) {
457 geBits = geBits | (0x3 << (i * 2));
458 }
459 }
460 Dest = resTemp;
461 resTemp = geBits;
462 ''', flagType="ge", buildNonCc=False)
463 buildRegDataInst("sasx", '''
464 int32_t midRes, geBits = 0;
465 resTemp = 0;
455 replaceBits(resTemp, high, low, midRes);
456 if (midRes >= 0) {
457 geBits = geBits | (0x3 << (i * 2));
458 }
459 }
460 Dest = resTemp;
461 resTemp = geBits;
462 ''', flagType="ge", buildNonCc=False)
463 buildRegDataInst("sasx", '''
464 int32_t midRes, geBits = 0;
465 resTemp = 0;
466 int64_t arg1Low = sext<16>(bits(Op1.sw, 15, 0));
467 int64_t arg1High = sext<16>(bits(Op1.sw, 31, 16));
468 int64_t arg2Low = sext<16>(bits(Op2.sw, 15, 0));
469 int64_t arg2High = sext<16>(bits(Op2.sw, 31, 16));
466 int64_t arg1Low = sext<16>(bits(Op1_sw, 15, 0));
467 int64_t arg1High = sext<16>(bits(Op1_sw, 31, 16));
468 int64_t arg2Low = sext<16>(bits(Op2_sw, 15, 0));
469 int64_t arg2High = sext<16>(bits(Op2_sw, 31, 16));
470 midRes = arg1Low - arg2High;
471 if (midRes >= 0) {
472 geBits = geBits | 0x3;
473 }
474 replaceBits(resTemp, 15, 0, midRes);
475 midRes = arg1High + arg2Low;
476 if (midRes >= 0) {
477 geBits = geBits | 0xc;
478 }
479 replaceBits(resTemp, 31, 16, midRes);
480 Dest = resTemp;
481 resTemp = geBits;
482 ''', flagType="ge", buildNonCc=True)
483 buildRegDataInst("ssax", '''
484 int32_t midRes, geBits = 0;
485 resTemp = 0;
470 midRes = arg1Low - arg2High;
471 if (midRes >= 0) {
472 geBits = geBits | 0x3;
473 }
474 replaceBits(resTemp, 15, 0, midRes);
475 midRes = arg1High + arg2Low;
476 if (midRes >= 0) {
477 geBits = geBits | 0xc;
478 }
479 replaceBits(resTemp, 31, 16, midRes);
480 Dest = resTemp;
481 resTemp = geBits;
482 ''', flagType="ge", buildNonCc=True)
483 buildRegDataInst("ssax", '''
484 int32_t midRes, geBits = 0;
485 resTemp = 0;
486 int64_t arg1Low = sext<16>(bits(Op1.sw, 15, 0));
487 int64_t arg1High = sext<16>(bits(Op1.sw, 31, 16));
488 int64_t arg2Low = sext<16>(bits(Op2.sw, 15, 0));
489 int64_t arg2High = sext<16>(bits(Op2.sw, 31, 16));
486 int64_t arg1Low = sext<16>(bits(Op1_sw, 15, 0));
487 int64_t arg1High = sext<16>(bits(Op1_sw, 31, 16));
488 int64_t arg2Low = sext<16>(bits(Op2_sw, 15, 0));
489 int64_t arg2High = sext<16>(bits(Op2_sw, 31, 16));
490 midRes = arg1Low + arg2High;
491 if (midRes >= 0) {
492 geBits = geBits | 0x3;
493 }
494 replaceBits(resTemp, 15, 0, midRes);
495 midRes = arg1High - arg2Low;
496 if (midRes >= 0) {
497 geBits = geBits | 0xc;

--- 4 unchanged lines hidden (view full) ---

502 ''', flagType="ge", buildNonCc=True)
503
504 buildRegDataInst("shadd8", '''
505 resTemp = 0;
506 for (unsigned i = 0; i < 4; i++) {
507 int high = (i + 1) * 8 - 1;
508 int low = i * 8;
509 int32_t midRes =
490 midRes = arg1Low + arg2High;
491 if (midRes >= 0) {
492 geBits = geBits | 0x3;
493 }
494 replaceBits(resTemp, 15, 0, midRes);
495 midRes = arg1High - arg2Low;
496 if (midRes >= 0) {
497 geBits = geBits | 0xc;

--- 4 unchanged lines hidden (view full) ---

502 ''', flagType="ge", buildNonCc=True)
503
504 buildRegDataInst("shadd8", '''
505 resTemp = 0;
506 for (unsigned i = 0; i < 4; i++) {
507 int high = (i + 1) * 8 - 1;
508 int low = i * 8;
509 int32_t midRes =
510 (uint64_t)(sext<8>(bits(Op1.sw, high, low)) +
511 sext<8>(bits(Op2.sw, high, low))) >> 1;
510 (uint64_t)(sext<8>(bits(Op1_sw, high, low)) +
511 sext<8>(bits(Op2_sw, high, low))) >> 1;
512 replaceBits(resTemp, high, low, midRes);
513 }
514 Dest = resTemp;
515 ''', flagType="none", buildCc=False)
516 buildRegDataInst("shadd16", '''
517 resTemp = 0;
518 for (unsigned i = 0; i < 2; i++) {
519 int high = (i + 1) * 16 - 1;
520 int low = i * 16;
521 int32_t midRes =
512 replaceBits(resTemp, high, low, midRes);
513 }
514 Dest = resTemp;
515 ''', flagType="none", buildCc=False)
516 buildRegDataInst("shadd16", '''
517 resTemp = 0;
518 for (unsigned i = 0; i < 2; i++) {
519 int high = (i + 1) * 16 - 1;
520 int low = i * 16;
521 int32_t midRes =
522 (uint64_t)(sext<16>(bits(Op1.sw, high, low)) +
523 sext<16>(bits(Op2.sw, high, low))) >> 1;
522 (uint64_t)(sext<16>(bits(Op1_sw, high, low)) +
523 sext<16>(bits(Op2_sw, high, low))) >> 1;
524 replaceBits(resTemp, high, low, midRes);
525 }
526 Dest = resTemp;
527 ''', flagType="none", buildCc=False)
528 buildRegDataInst("shsub8", '''
529 resTemp = 0;
530 for (unsigned i = 0; i < 4; i++) {
531 int high = (i + 1) * 8 - 1;
532 int low = i * 8;
533 int32_t midRes =
524 replaceBits(resTemp, high, low, midRes);
525 }
526 Dest = resTemp;
527 ''', flagType="none", buildCc=False)
528 buildRegDataInst("shsub8", '''
529 resTemp = 0;
530 for (unsigned i = 0; i < 4; i++) {
531 int high = (i + 1) * 8 - 1;
532 int low = i * 8;
533 int32_t midRes =
534 (uint64_t)(sext<8>(bits(Op1.sw, high, low)) -
535 sext<8>(bits(Op2.sw, high, low))) >> 1;
534 (uint64_t)(sext<8>(bits(Op1_sw, high, low)) -
535 sext<8>(bits(Op2_sw, high, low))) >> 1;
536 replaceBits(resTemp, high, low, midRes);
537 }
538 Dest = resTemp;
539 ''', flagType="none", buildCc=False)
540 buildRegDataInst("shsub16", '''
541 resTemp = 0;
542 for (unsigned i = 0; i < 2; i++) {
543 int high = (i + 1) * 16 - 1;
544 int low = i * 16;
545 int32_t midRes =
536 replaceBits(resTemp, high, low, midRes);
537 }
538 Dest = resTemp;
539 ''', flagType="none", buildCc=False)
540 buildRegDataInst("shsub16", '''
541 resTemp = 0;
542 for (unsigned i = 0; i < 2; i++) {
543 int high = (i + 1) * 16 - 1;
544 int low = i * 16;
545 int32_t midRes =
546 (uint64_t)(sext<16>(bits(Op1.sw, high, low)) -
547 sext<16>(bits(Op2.sw, high, low))) >> 1;
546 (uint64_t)(sext<16>(bits(Op1_sw, high, low)) -
547 sext<16>(bits(Op2_sw, high, low))) >> 1;
548 replaceBits(resTemp, high, low, midRes);
549 }
550 Dest = resTemp;
551 ''', flagType="none", buildCc=False)
552 buildRegDataInst("shasx", '''
553 int32_t midRes;
554 resTemp = 0;
548 replaceBits(resTemp, high, low, midRes);
549 }
550 Dest = resTemp;
551 ''', flagType="none", buildCc=False)
552 buildRegDataInst("shasx", '''
553 int32_t midRes;
554 resTemp = 0;
555 int64_t arg1Low = sext<16>(bits(Op1.sw, 15, 0));
556 int64_t arg1High = sext<16>(bits(Op1.sw, 31, 16));
557 int64_t arg2Low = sext<16>(bits(Op2.sw, 15, 0));
558 int64_t arg2High = sext<16>(bits(Op2.sw, 31, 16));
555 int64_t arg1Low = sext<16>(bits(Op1_sw, 15, 0));
556 int64_t arg1High = sext<16>(bits(Op1_sw, 31, 16));
557 int64_t arg2Low = sext<16>(bits(Op2_sw, 15, 0));
558 int64_t arg2High = sext<16>(bits(Op2_sw, 31, 16));
559 midRes = (uint64_t)(arg1Low - arg2High) >> 1;
560 replaceBits(resTemp, 15, 0, midRes);
561 midRes = (arg1High + arg2Low) >> 1;
562 replaceBits(resTemp, 31, 16, midRes);
563 Dest = resTemp;
564 ''', flagType="none", buildCc=True)
565 buildRegDataInst("shsax", '''
566 int32_t midRes;
567 resTemp = 0;
559 midRes = (uint64_t)(arg1Low - arg2High) >> 1;
560 replaceBits(resTemp, 15, 0, midRes);
561 midRes = (arg1High + arg2Low) >> 1;
562 replaceBits(resTemp, 31, 16, midRes);
563 Dest = resTemp;
564 ''', flagType="none", buildCc=True)
565 buildRegDataInst("shsax", '''
566 int32_t midRes;
567 resTemp = 0;
568 int64_t arg1Low = sext<16>(bits(Op1.sw, 15, 0));
569 int64_t arg1High = sext<16>(bits(Op1.sw, 31, 16));
570 int64_t arg2Low = sext<16>(bits(Op2.sw, 15, 0));
571 int64_t arg2High = sext<16>(bits(Op2.sw, 31, 16));
568 int64_t arg1Low = sext<16>(bits(Op1_sw, 15, 0));
569 int64_t arg1High = sext<16>(bits(Op1_sw, 31, 16));
570 int64_t arg2Low = sext<16>(bits(Op2_sw, 15, 0));
571 int64_t arg2High = sext<16>(bits(Op2_sw, 31, 16));
572 midRes = (uint64_t)(arg1Low + arg2High) >> 1;
573 replaceBits(resTemp, 15, 0, midRes);
574 midRes = (uint64_t)(arg1High - arg2Low) >> 1;
575 replaceBits(resTemp, 31, 16, midRes);
576 Dest = resTemp;
577 ''', flagType="none", buildCc=True)
578
579 buildRegDataInst("uqadd16", '''

--- 41 unchanged lines hidden (view full) ---

621 uint64_t arg2 = bits(Op2, high, low);
622 uSaturateOp<8>(midRes, arg1, arg2, true);
623 replaceBits(resTemp, high, low, midRes);
624 }
625 Dest = resTemp;
626 ''', flagType="none", buildCc=False)
627 buildRegDataInst("uqasx", '''
628 uint32_t midRes;
572 midRes = (uint64_t)(arg1Low + arg2High) >> 1;
573 replaceBits(resTemp, 15, 0, midRes);
574 midRes = (uint64_t)(arg1High - arg2Low) >> 1;
575 replaceBits(resTemp, 31, 16, midRes);
576 Dest = resTemp;
577 ''', flagType="none", buildCc=True)
578
579 buildRegDataInst("uqadd16", '''

--- 41 unchanged lines hidden (view full) ---

621 uint64_t arg2 = bits(Op2, high, low);
622 uSaturateOp<8>(midRes, arg1, arg2, true);
623 replaceBits(resTemp, high, low, midRes);
624 }
625 Dest = resTemp;
626 ''', flagType="none", buildCc=False)
627 buildRegDataInst("uqasx", '''
628 uint32_t midRes;
629 uint64_t arg1Low = bits(Op1.sw, 15, 0);
630 uint64_t arg1High = bits(Op1.sw, 31, 16);
631 uint64_t arg2Low = bits(Op2.sw, 15, 0);
632 uint64_t arg2High = bits(Op2.sw, 31, 16);
629 uint64_t arg1Low = bits(Op1_sw, 15, 0);
630 uint64_t arg1High = bits(Op1_sw, 31, 16);
631 uint64_t arg2Low = bits(Op2_sw, 15, 0);
632 uint64_t arg2High = bits(Op2_sw, 31, 16);
633 uSaturateOp<16>(midRes, arg1Low, arg2High, true);
634 replaceBits(resTemp, 15, 0, midRes);
635 uSaturateOp<16>(midRes, arg1High, arg2Low);
636 replaceBits(resTemp, 31, 16, midRes);
637 Dest = resTemp;
638 ''', flagType="none", buildCc=False)
639 buildRegDataInst("uqsax", '''
640 uint32_t midRes;
633 uSaturateOp<16>(midRes, arg1Low, arg2High, true);
634 replaceBits(resTemp, 15, 0, midRes);
635 uSaturateOp<16>(midRes, arg1High, arg2Low);
636 replaceBits(resTemp, 31, 16, midRes);
637 Dest = resTemp;
638 ''', flagType="none", buildCc=False)
639 buildRegDataInst("uqsax", '''
640 uint32_t midRes;
641 uint64_t arg1Low = bits(Op1.sw, 15, 0);
642 uint64_t arg1High = bits(Op1.sw, 31, 16);
643 uint64_t arg2Low = bits(Op2.sw, 15, 0);
644 uint64_t arg2High = bits(Op2.sw, 31, 16);
641 uint64_t arg1Low = bits(Op1_sw, 15, 0);
642 uint64_t arg1High = bits(Op1_sw, 31, 16);
643 uint64_t arg2Low = bits(Op2_sw, 15, 0);
644 uint64_t arg2High = bits(Op2_sw, 31, 16);
645 uSaturateOp<16>(midRes, arg1Low, arg2High);
646 replaceBits(resTemp, 15, 0, midRes);
647 uSaturateOp<16>(midRes, arg1High, arg2Low, true);
648 replaceBits(resTemp, 31, 16, midRes);
649 Dest = resTemp;
650 ''', flagType="none", buildCc=False)
651
652 buildRegDataInst("uadd16", '''

--- 58 unchanged lines hidden (view full) ---

711 replaceBits(resTemp, high, low, midRes);
712 }
713 Dest = resTemp;
714 resTemp = geBits;
715 ''', flagType="ge", buildNonCc=False)
716 buildRegDataInst("uasx", '''
717 int32_t midRes, geBits = 0;
718 resTemp = 0;
645 uSaturateOp<16>(midRes, arg1Low, arg2High);
646 replaceBits(resTemp, 15, 0, midRes);
647 uSaturateOp<16>(midRes, arg1High, arg2Low, true);
648 replaceBits(resTemp, 31, 16, midRes);
649 Dest = resTemp;
650 ''', flagType="none", buildCc=False)
651
652 buildRegDataInst("uadd16", '''

--- 58 unchanged lines hidden (view full) ---

711 replaceBits(resTemp, high, low, midRes);
712 }
713 Dest = resTemp;
714 resTemp = geBits;
715 ''', flagType="ge", buildNonCc=False)
716 buildRegDataInst("uasx", '''
717 int32_t midRes, geBits = 0;
718 resTemp = 0;
719 int64_t arg1Low = bits(Op1.sw, 15, 0);
720 int64_t arg1High = bits(Op1.sw, 31, 16);
721 int64_t arg2Low = bits(Op2.sw, 15, 0);
722 int64_t arg2High = bits(Op2.sw, 31, 16);
719 int64_t arg1Low = bits(Op1_sw, 15, 0);
720 int64_t arg1High = bits(Op1_sw, 31, 16);
721 int64_t arg2Low = bits(Op2_sw, 15, 0);
722 int64_t arg2High = bits(Op2_sw, 31, 16);
723 midRes = arg1Low - arg2High;
724 if (midRes >= 0) {
725 geBits = geBits | 0x3;
726 }
727 replaceBits(resTemp, 15, 0, midRes);
728 midRes = arg1High + arg2Low;
729 if (midRes >= 0x10000) {
730 geBits = geBits | 0xc;
731 }
732 replaceBits(resTemp, 31, 16, midRes);
733 Dest = resTemp;
734 resTemp = geBits;
735 ''', flagType="ge", buildNonCc=False)
736 buildRegDataInst("usax", '''
737 int32_t midRes, geBits = 0;
738 resTemp = 0;
723 midRes = arg1Low - arg2High;
724 if (midRes >= 0) {
725 geBits = geBits | 0x3;
726 }
727 replaceBits(resTemp, 15, 0, midRes);
728 midRes = arg1High + arg2Low;
729 if (midRes >= 0x10000) {
730 geBits = geBits | 0xc;
731 }
732 replaceBits(resTemp, 31, 16, midRes);
733 Dest = resTemp;
734 resTemp = geBits;
735 ''', flagType="ge", buildNonCc=False)
736 buildRegDataInst("usax", '''
737 int32_t midRes, geBits = 0;
738 resTemp = 0;
739 int64_t arg1Low = bits(Op1.sw, 15, 0);
740 int64_t arg1High = bits(Op1.sw, 31, 16);
741 int64_t arg2Low = bits(Op2.sw, 15, 0);
742 int64_t arg2High = bits(Op2.sw, 31, 16);
739 int64_t arg1Low = bits(Op1_sw, 15, 0);
740 int64_t arg1High = bits(Op1_sw, 31, 16);
741 int64_t arg2Low = bits(Op2_sw, 15, 0);
742 int64_t arg2High = bits(Op2_sw, 31, 16);
743 midRes = arg1Low + arg2High;
744 if (midRes >= 0x10000) {
745 geBits = geBits | 0x3;
746 }
747 replaceBits(resTemp, 15, 0, midRes);
748 midRes = arg1High - arg2Low;
749 if (midRes >= 0) {
750 geBits = geBits | 0xc;

--- 45 unchanged lines hidden (view full) ---

796 bits(Op2, high, low)) >> 1;
797 replaceBits(resTemp, high, low, midRes);
798 }
799 Dest = resTemp;
800 ''', flagType="none", buildCc=False)
801 buildRegDataInst("uhasx", '''
802 int32_t midRes;
803 resTemp = 0;
743 midRes = arg1Low + arg2High;
744 if (midRes >= 0x10000) {
745 geBits = geBits | 0x3;
746 }
747 replaceBits(resTemp, 15, 0, midRes);
748 midRes = arg1High - arg2Low;
749 if (midRes >= 0) {
750 geBits = geBits | 0xc;

--- 45 unchanged lines hidden (view full) ---

796 bits(Op2, high, low)) >> 1;
797 replaceBits(resTemp, high, low, midRes);
798 }
799 Dest = resTemp;
800 ''', flagType="none", buildCc=False)
801 buildRegDataInst("uhasx", '''
802 int32_t midRes;
803 resTemp = 0;
804 int64_t arg1Low = bits(Op1.sw, 15, 0);
805 int64_t arg1High = bits(Op1.sw, 31, 16);
806 int64_t arg2Low = bits(Op2.sw, 15, 0);
807 int64_t arg2High = bits(Op2.sw, 31, 16);
804 int64_t arg1Low = bits(Op1_sw, 15, 0);
805 int64_t arg1High = bits(Op1_sw, 31, 16);
806 int64_t arg2Low = bits(Op2_sw, 15, 0);
807 int64_t arg2High = bits(Op2_sw, 31, 16);
808 midRes = (arg1Low - arg2High) >> 1;
809 replaceBits(resTemp, 15, 0, midRes);
810 midRes = (arg1High + arg2Low) >> 1;
811 replaceBits(resTemp, 31, 16, midRes);
812 Dest = resTemp;
813 ''', flagType="none", buildCc=False)
814 buildRegDataInst("uhsax", '''
815 int32_t midRes;
816 resTemp = 0;
808 midRes = (arg1Low - arg2High) >> 1;
809 replaceBits(resTemp, 15, 0, midRes);
810 midRes = (arg1High + arg2Low) >> 1;
811 replaceBits(resTemp, 31, 16, midRes);
812 Dest = resTemp;
813 ''', flagType="none", buildCc=False)
814 buildRegDataInst("uhsax", '''
815 int32_t midRes;
816 resTemp = 0;
817 int64_t arg1Low = bits(Op1.sw, 15, 0);
818 int64_t arg1High = bits(Op1.sw, 31, 16);
819 int64_t arg2Low = bits(Op2.sw, 15, 0);
820 int64_t arg2High = bits(Op2.sw, 31, 16);
817 int64_t arg1Low = bits(Op1_sw, 15, 0);
818 int64_t arg1High = bits(Op1_sw, 31, 16);
819 int64_t arg2Low = bits(Op2_sw, 15, 0);
820 int64_t arg2High = bits(Op2_sw, 31, 16);
821 midRes = (arg1Low + arg2High) >> 1;
822 replaceBits(resTemp, 15, 0, midRes);
823 midRes = (arg1High - arg2Low) >> 1;
824 replaceBits(resTemp, 31, 16, midRes);
825 Dest = resTemp;
826 ''', flagType="none", buildCc=False)
827
828 buildRegDataInst("pkhbt", '''

--- 16 unchanged lines hidden ---
821 midRes = (arg1Low + arg2High) >> 1;
822 replaceBits(resTemp, 15, 0, midRes);
823 midRes = (arg1High - arg2Low) >> 1;
824 replaceBits(resTemp, 31, 16, midRes);
825 Dest = resTemp;
826 ''', flagType="none", buildCc=False)
827
828 buildRegDataInst("pkhbt", '''

--- 16 unchanged lines hidden ---