fp.isa (7377:ce388054b481) fp.isa (7378:de704acd042f)
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

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

371 vmov2Core2RegIop = InstObjParams("vmov", "Vmov2Core2Reg", "VfpRegRegRegOp",
372 { "code": vmov2Core2RegCode,
373 "predicate_test": predicateTest }, [])
374 header_output += VfpRegRegRegOpDeclare.subst(vmov2Core2RegIop);
375 decoder_output += VfpRegRegRegOpConstructor.subst(vmov2Core2RegIop);
376 exec_output += PredOpExecute.subst(vmov2Core2RegIop);
377
378 vmulSCode = '''
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

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

371 vmov2Core2RegIop = InstObjParams("vmov", "Vmov2Core2Reg", "VfpRegRegRegOp",
372 { "code": vmov2Core2RegCode,
373 "predicate_test": predicateTest }, [])
374 header_output += VfpRegRegRegOpDeclare.subst(vmov2Core2RegIop);
375 decoder_output += VfpRegRegRegOpConstructor.subst(vmov2Core2RegIop);
376 exec_output += PredOpExecute.subst(vmov2Core2RegIop);
377
378 vmulSCode = '''
379 VfpSavedState state = prepVfpFpscr(Fpscr);
379 FpDest = FpOp1 * FpOp2;
380 FpDest = FpOp1 * FpOp2;
381 Fpscr = setVfpFpscr(Fpscr, state);
380 if ((isinf(FpOp1) && FpOp2 == 0) || (isinf(FpOp2) && FpOp1 == 0)) {
381 FpDest = NAN;
382 }
383 '''
384 vmulSIop = InstObjParams("vmuls", "VmulS", "VfpRegRegRegOp",
385 { "code": vmulSCode,
386 "predicate_test": predicateTest }, [])
387 header_output += VfpRegRegRegOpDeclare.subst(vmulSIop);
388 decoder_output += VfpRegRegRegOpConstructor.subst(vmulSIop);
389 exec_output += PredOpExecute.subst(vmulSIop);
390
391 vmulDCode = '''
392 IntDoubleUnion cOp1, cOp2, cDest;
393 cOp1.bits = ((uint64_t)FpOp1P0.uw | ((uint64_t)FpOp1P1.uw << 32));
394 cOp2.bits = ((uint64_t)FpOp2P0.uw | ((uint64_t)FpOp2P1.uw << 32));
382 if ((isinf(FpOp1) && FpOp2 == 0) || (isinf(FpOp2) && FpOp1 == 0)) {
383 FpDest = NAN;
384 }
385 '''
386 vmulSIop = InstObjParams("vmuls", "VmulS", "VfpRegRegRegOp",
387 { "code": vmulSCode,
388 "predicate_test": predicateTest }, [])
389 header_output += VfpRegRegRegOpDeclare.subst(vmulSIop);
390 decoder_output += VfpRegRegRegOpConstructor.subst(vmulSIop);
391 exec_output += PredOpExecute.subst(vmulSIop);
392
393 vmulDCode = '''
394 IntDoubleUnion cOp1, cOp2, cDest;
395 cOp1.bits = ((uint64_t)FpOp1P0.uw | ((uint64_t)FpOp1P1.uw << 32));
396 cOp2.bits = ((uint64_t)FpOp2P0.uw | ((uint64_t)FpOp2P1.uw << 32));
397 VfpSavedState state = prepVfpFpscr(Fpscr);
395 cDest.fp = cOp1.fp * cOp2.fp;
398 cDest.fp = cOp1.fp * cOp2.fp;
399 Fpscr = setVfpFpscr(Fpscr, state);
396 if ((isinf(cOp1.fp) && cOp2.fp == 0) ||
397 (isinf(cOp2.fp) && cOp1.fp == 0)) {
398 cDest.fp = NAN;
399 }
400 FpDestP0.uw = cDest.bits;
401 FpDestP1.uw = cDest.bits >> 32;
402 '''
403 vmulDIop = InstObjParams("vmuld", "VmulD", "VfpRegRegRegOp",

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

451 vabsDIop = InstObjParams("vabsd", "VabsD", "VfpRegRegOp",
452 { "code": vabsDCode,
453 "predicate_test": predicateTest }, [])
454 header_output += VfpRegRegOpDeclare.subst(vabsDIop);
455 decoder_output += VfpRegRegOpConstructor.subst(vabsDIop);
456 exec_output += PredOpExecute.subst(vabsDIop);
457
458 vaddSCode = '''
400 if ((isinf(cOp1.fp) && cOp2.fp == 0) ||
401 (isinf(cOp2.fp) && cOp1.fp == 0)) {
402 cDest.fp = NAN;
403 }
404 FpDestP0.uw = cDest.bits;
405 FpDestP1.uw = cDest.bits >> 32;
406 '''
407 vmulDIop = InstObjParams("vmuld", "VmulD", "VfpRegRegRegOp",

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

455 vabsDIop = InstObjParams("vabsd", "VabsD", "VfpRegRegOp",
456 { "code": vabsDCode,
457 "predicate_test": predicateTest }, [])
458 header_output += VfpRegRegOpDeclare.subst(vabsDIop);
459 decoder_output += VfpRegRegOpConstructor.subst(vabsDIop);
460 exec_output += PredOpExecute.subst(vabsDIop);
461
462 vaddSCode = '''
463 VfpSavedState state = prepVfpFpscr(Fpscr);
459 FpDest = FpOp1 + FpOp2;
464 FpDest = FpOp1 + FpOp2;
465 Fpscr = setVfpFpscr(Fpscr, state);
460 '''
461 vaddSIop = InstObjParams("vadds", "VaddS", "VfpRegRegRegOp",
462 { "code": vaddSCode,
463 "predicate_test": predicateTest }, [])
464 header_output += VfpRegRegRegOpDeclare.subst(vaddSIop);
465 decoder_output += VfpRegRegRegOpConstructor.subst(vaddSIop);
466 exec_output += PredOpExecute.subst(vaddSIop);
467
468 vaddDCode = '''
469 IntDoubleUnion cOp1, cOp2, cDest;
470 cOp1.bits = ((uint64_t)FpOp1P0.uw | ((uint64_t)FpOp1P1.uw << 32));
471 cOp2.bits = ((uint64_t)FpOp2P0.uw | ((uint64_t)FpOp2P1.uw << 32));
466 '''
467 vaddSIop = InstObjParams("vadds", "VaddS", "VfpRegRegRegOp",
468 { "code": vaddSCode,
469 "predicate_test": predicateTest }, [])
470 header_output += VfpRegRegRegOpDeclare.subst(vaddSIop);
471 decoder_output += VfpRegRegRegOpConstructor.subst(vaddSIop);
472 exec_output += PredOpExecute.subst(vaddSIop);
473
474 vaddDCode = '''
475 IntDoubleUnion cOp1, cOp2, cDest;
476 cOp1.bits = ((uint64_t)FpOp1P0.uw | ((uint64_t)FpOp1P1.uw << 32));
477 cOp2.bits = ((uint64_t)FpOp2P0.uw | ((uint64_t)FpOp2P1.uw << 32));
478 VfpSavedState state = prepVfpFpscr(Fpscr);
472 cDest.fp = cOp1.fp + cOp2.fp;
479 cDest.fp = cOp1.fp + cOp2.fp;
480 Fpscr = setVfpFpscr(Fpscr, state);
473 FpDestP0.uw = cDest.bits;
474 FpDestP1.uw = cDest.bits >> 32;
475 '''
476 vaddDIop = InstObjParams("vaddd", "VaddD", "VfpRegRegRegOp",
477 { "code": vaddDCode,
478 "predicate_test": predicateTest }, [])
479 header_output += VfpRegRegRegOpDeclare.subst(vaddDIop);
480 decoder_output += VfpRegRegRegOpConstructor.subst(vaddDIop);
481 exec_output += PredOpExecute.subst(vaddDIop);
482
483 vsubSCode = '''
481 FpDestP0.uw = cDest.bits;
482 FpDestP1.uw = cDest.bits >> 32;
483 '''
484 vaddDIop = InstObjParams("vaddd", "VaddD", "VfpRegRegRegOp",
485 { "code": vaddDCode,
486 "predicate_test": predicateTest }, [])
487 header_output += VfpRegRegRegOpDeclare.subst(vaddDIop);
488 decoder_output += VfpRegRegRegOpConstructor.subst(vaddDIop);
489 exec_output += PredOpExecute.subst(vaddDIop);
490
491 vsubSCode = '''
492 VfpSavedState state = prepVfpFpscr(Fpscr);
484 FpDest = FpOp1 - FpOp2;
493 FpDest = FpOp1 - FpOp2;
494 Fpscr = setVfpFpscr(Fpscr, state)
485 '''
486 vsubSIop = InstObjParams("vsubs", "VsubS", "VfpRegRegRegOp",
487 { "code": vsubSCode,
488 "predicate_test": predicateTest }, [])
489 header_output += VfpRegRegRegOpDeclare.subst(vsubSIop);
490 decoder_output += VfpRegRegRegOpConstructor.subst(vsubSIop);
491 exec_output += PredOpExecute.subst(vsubSIop);
492
493 vsubDCode = '''
494 IntDoubleUnion cOp1, cOp2, cDest;
495 cOp1.bits = ((uint64_t)FpOp1P0.uw | ((uint64_t)FpOp1P1.uw << 32));
496 cOp2.bits = ((uint64_t)FpOp2P0.uw | ((uint64_t)FpOp2P1.uw << 32));
495 '''
496 vsubSIop = InstObjParams("vsubs", "VsubS", "VfpRegRegRegOp",
497 { "code": vsubSCode,
498 "predicate_test": predicateTest }, [])
499 header_output += VfpRegRegRegOpDeclare.subst(vsubSIop);
500 decoder_output += VfpRegRegRegOpConstructor.subst(vsubSIop);
501 exec_output += PredOpExecute.subst(vsubSIop);
502
503 vsubDCode = '''
504 IntDoubleUnion cOp1, cOp2, cDest;
505 cOp1.bits = ((uint64_t)FpOp1P0.uw | ((uint64_t)FpOp1P1.uw << 32));
506 cOp2.bits = ((uint64_t)FpOp2P0.uw | ((uint64_t)FpOp2P1.uw << 32));
507 VfpSavedState state = prepVfpFpscr(Fpscr);
497 cDest.fp = cOp1.fp - cOp2.fp;
508 cDest.fp = cOp1.fp - cOp2.fp;
509 Fpscr = setVfpFpscr(Fpscr, state);
498 FpDestP0.uw = cDest.bits;
499 FpDestP1.uw = cDest.bits >> 32;
500 '''
501 vsubDIop = InstObjParams("vsubd", "VsubD", "VfpRegRegRegOp",
502 { "code": vsubDCode,
503 "predicate_test": predicateTest }, [])
504 header_output += VfpRegRegRegOpDeclare.subst(vsubDIop);
505 decoder_output += VfpRegRegRegOpConstructor.subst(vsubDIop);
506 exec_output += PredOpExecute.subst(vsubDIop);
507
508 vdivSCode = '''
510 FpDestP0.uw = cDest.bits;
511 FpDestP1.uw = cDest.bits >> 32;
512 '''
513 vsubDIop = InstObjParams("vsubd", "VsubD", "VfpRegRegRegOp",
514 { "code": vsubDCode,
515 "predicate_test": predicateTest }, [])
516 header_output += VfpRegRegRegOpDeclare.subst(vsubDIop);
517 decoder_output += VfpRegRegRegOpConstructor.subst(vsubDIop);
518 exec_output += PredOpExecute.subst(vsubDIop);
519
520 vdivSCode = '''
521 VfpSavedState state = prepVfpFpscr(Fpscr);
509 FpDest = FpOp1 / FpOp2;
522 FpDest = FpOp1 / FpOp2;
523 Fpscr = setVfpFpscr(Fpscr, state);
510 '''
511 vdivSIop = InstObjParams("vdivs", "VdivS", "VfpRegRegRegOp",
512 { "code": vdivSCode,
513 "predicate_test": predicateTest }, [])
514 header_output += VfpRegRegRegOpDeclare.subst(vdivSIop);
515 decoder_output += VfpRegRegRegOpConstructor.subst(vdivSIop);
516 exec_output += PredOpExecute.subst(vdivSIop);
517
518 vdivDCode = '''
519 IntDoubleUnion cOp1, cOp2, cDest;
520 cOp1.bits = ((uint64_t)FpOp1P0.uw | ((uint64_t)FpOp1P1.uw << 32));
521 cOp2.bits = ((uint64_t)FpOp2P0.uw | ((uint64_t)FpOp2P1.uw << 32));
524 '''
525 vdivSIop = InstObjParams("vdivs", "VdivS", "VfpRegRegRegOp",
526 { "code": vdivSCode,
527 "predicate_test": predicateTest }, [])
528 header_output += VfpRegRegRegOpDeclare.subst(vdivSIop);
529 decoder_output += VfpRegRegRegOpConstructor.subst(vdivSIop);
530 exec_output += PredOpExecute.subst(vdivSIop);
531
532 vdivDCode = '''
533 IntDoubleUnion cOp1, cOp2, cDest;
534 cOp1.bits = ((uint64_t)FpOp1P0.uw | ((uint64_t)FpOp1P1.uw << 32));
535 cOp2.bits = ((uint64_t)FpOp2P0.uw | ((uint64_t)FpOp2P1.uw << 32));
536 VfpSavedState state = prepVfpFpscr(Fpscr);
522 cDest.fp = cOp1.fp / cOp2.fp;
537 cDest.fp = cOp1.fp / cOp2.fp;
538 Fpscr = setVfpFpscr(Fpscr, state);
523 FpDestP0.uw = cDest.bits;
524 FpDestP1.uw = cDest.bits >> 32;
525 '''
526 vdivDIop = InstObjParams("vdivd", "VdivD", "VfpRegRegRegOp",
527 { "code": vdivDCode,
528 "predicate_test": predicateTest }, [])
529 header_output += VfpRegRegRegOpDeclare.subst(vdivDIop);
530 decoder_output += VfpRegRegRegOpConstructor.subst(vdivDIop);
531 exec_output += PredOpExecute.subst(vdivDIop);
532
533 vsqrtSCode = '''
539 FpDestP0.uw = cDest.bits;
540 FpDestP1.uw = cDest.bits >> 32;
541 '''
542 vdivDIop = InstObjParams("vdivd", "VdivD", "VfpRegRegRegOp",
543 { "code": vdivDCode,
544 "predicate_test": predicateTest }, [])
545 header_output += VfpRegRegRegOpDeclare.subst(vdivDIop);
546 decoder_output += VfpRegRegRegOpConstructor.subst(vdivDIop);
547 exec_output += PredOpExecute.subst(vdivDIop);
548
549 vsqrtSCode = '''
550 VfpSavedState state = prepVfpFpscr(Fpscr);
534 FpDest = sqrtf(FpOp1);
551 FpDest = sqrtf(FpOp1);
552 Fpscr = setVfpFpscr(Fpscr, state);
535 if (FpOp1 < 0) {
536 FpDest = NAN;
537 }
538 '''
539 vsqrtSIop = InstObjParams("vsqrts", "VsqrtS", "VfpRegRegOp",
540 { "code": vsqrtSCode,
541 "predicate_test": predicateTest }, [])
542 header_output += VfpRegRegOpDeclare.subst(vsqrtSIop);
543 decoder_output += VfpRegRegOpConstructor.subst(vsqrtSIop);
544 exec_output += PredOpExecute.subst(vsqrtSIop);
545
546 vsqrtDCode = '''
547 IntDoubleUnion cOp1, cDest;
548 cOp1.bits = ((uint64_t)FpOp1P0.uw | ((uint64_t)FpOp1P1.uw << 32));
553 if (FpOp1 < 0) {
554 FpDest = NAN;
555 }
556 '''
557 vsqrtSIop = InstObjParams("vsqrts", "VsqrtS", "VfpRegRegOp",
558 { "code": vsqrtSCode,
559 "predicate_test": predicateTest }, [])
560 header_output += VfpRegRegOpDeclare.subst(vsqrtSIop);
561 decoder_output += VfpRegRegOpConstructor.subst(vsqrtSIop);
562 exec_output += PredOpExecute.subst(vsqrtSIop);
563
564 vsqrtDCode = '''
565 IntDoubleUnion cOp1, cDest;
566 cOp1.bits = ((uint64_t)FpOp1P0.uw | ((uint64_t)FpOp1P1.uw << 32));
567 VfpSavedState state = prepVfpFpscr(Fpscr);
549 cDest.fp = sqrt(cOp1.fp);
568 cDest.fp = sqrt(cOp1.fp);
569 Fpscr = setVfpFpscr(Fpscr, state);
550 if (cOp1.fp < 0) {
551 cDest.fp = NAN;
552 }
553 FpDestP0.uw = cDest.bits;
554 FpDestP1.uw = cDest.bits >> 32;
555 '''
556 vsqrtDIop = InstObjParams("vsqrtd", "VsqrtD", "VfpRegRegOp",
557 { "code": vsqrtDCode,
558 "predicate_test": predicateTest }, [])
559 header_output += VfpRegRegOpDeclare.subst(vsqrtDIop);
560 decoder_output += VfpRegRegOpConstructor.subst(vsqrtDIop);
561 exec_output += PredOpExecute.subst(vsqrtDIop);
562
563 vmlaSCode = '''
570 if (cOp1.fp < 0) {
571 cDest.fp = NAN;
572 }
573 FpDestP0.uw = cDest.bits;
574 FpDestP1.uw = cDest.bits >> 32;
575 '''
576 vsqrtDIop = InstObjParams("vsqrtd", "VsqrtD", "VfpRegRegOp",
577 { "code": vsqrtDCode,
578 "predicate_test": predicateTest }, [])
579 header_output += VfpRegRegOpDeclare.subst(vsqrtDIop);
580 decoder_output += VfpRegRegOpConstructor.subst(vsqrtDIop);
581 exec_output += PredOpExecute.subst(vsqrtDIop);
582
583 vmlaSCode = '''
584 VfpSavedState state = prepVfpFpscr(Fpscr);
564 float mid = FpOp1 * FpOp2;
565 if ((isinf(FpOp1) && FpOp2 == 0) || (isinf(FpOp2) && FpOp1 == 0)) {
566 mid = NAN;
567 }
568 FpDest = FpDest + mid;
585 float mid = FpOp1 * FpOp2;
586 if ((isinf(FpOp1) && FpOp2 == 0) || (isinf(FpOp2) && FpOp1 == 0)) {
587 mid = NAN;
588 }
589 FpDest = FpDest + mid;
590 Fpscr = setVfpFpscr(Fpscr, state);
569 '''
570 vmlaSIop = InstObjParams("vmlas", "VmlaS", "VfpRegRegRegOp",
571 { "code": vmlaSCode,
572 "predicate_test": predicateTest }, [])
573 header_output += VfpRegRegRegOpDeclare.subst(vmlaSIop);
574 decoder_output += VfpRegRegRegOpConstructor.subst(vmlaSIop);
575 exec_output += PredOpExecute.subst(vmlaSIop);
576
577 vmlaDCode = '''
578 IntDoubleUnion cOp1, cOp2, cDest;
579 cOp1.bits = ((uint64_t)FpOp1P0.uw | ((uint64_t)FpOp1P1.uw << 32));
580 cOp2.bits = ((uint64_t)FpOp2P0.uw | ((uint64_t)FpOp2P1.uw << 32));
581 cDest.bits = ((uint64_t)FpDestP0.uw | ((uint64_t)FpDestP1.uw << 32));
591 '''
592 vmlaSIop = InstObjParams("vmlas", "VmlaS", "VfpRegRegRegOp",
593 { "code": vmlaSCode,
594 "predicate_test": predicateTest }, [])
595 header_output += VfpRegRegRegOpDeclare.subst(vmlaSIop);
596 decoder_output += VfpRegRegRegOpConstructor.subst(vmlaSIop);
597 exec_output += PredOpExecute.subst(vmlaSIop);
598
599 vmlaDCode = '''
600 IntDoubleUnion cOp1, cOp2, cDest;
601 cOp1.bits = ((uint64_t)FpOp1P0.uw | ((uint64_t)FpOp1P1.uw << 32));
602 cOp2.bits = ((uint64_t)FpOp2P0.uw | ((uint64_t)FpOp2P1.uw << 32));
603 cDest.bits = ((uint64_t)FpDestP0.uw | ((uint64_t)FpDestP1.uw << 32));
604 VfpSavedState state = prepVfpFpscr(Fpscr);
582 double mid = cOp1.fp * cOp2.fp;
583 if ((isinf(cOp1.fp) && cOp2.fp == 0) ||
584 (isinf(cOp2.fp) && cOp1.fp == 0)) {
585 mid = NAN;
586 }
587 cDest.fp = cDest.fp + mid;
605 double mid = cOp1.fp * cOp2.fp;
606 if ((isinf(cOp1.fp) && cOp2.fp == 0) ||
607 (isinf(cOp2.fp) && cOp1.fp == 0)) {
608 mid = NAN;
609 }
610 cDest.fp = cDest.fp + mid;
611 Fpscr = setVfpFpscr(Fpscr, state);
588 FpDestP0.uw = cDest.bits;
589 FpDestP1.uw = cDest.bits >> 32;
590 '''
591 vmlaDIop = InstObjParams("vmlad", "VmlaD", "VfpRegRegRegOp",
592 { "code": vmlaDCode,
593 "predicate_test": predicateTest }, [])
594 header_output += VfpRegRegRegOpDeclare.subst(vmlaDIop);
595 decoder_output += VfpRegRegRegOpConstructor.subst(vmlaDIop);
596 exec_output += PredOpExecute.subst(vmlaDIop);
597
598 vmlsSCode = '''
612 FpDestP0.uw = cDest.bits;
613 FpDestP1.uw = cDest.bits >> 32;
614 '''
615 vmlaDIop = InstObjParams("vmlad", "VmlaD", "VfpRegRegRegOp",
616 { "code": vmlaDCode,
617 "predicate_test": predicateTest }, [])
618 header_output += VfpRegRegRegOpDeclare.subst(vmlaDIop);
619 decoder_output += VfpRegRegRegOpConstructor.subst(vmlaDIop);
620 exec_output += PredOpExecute.subst(vmlaDIop);
621
622 vmlsSCode = '''
623 VfpSavedState state = prepVfpFpscr(Fpscr);
599 float mid = FpOp1 * FpOp2;
600 if ((isinf(FpOp1) && FpOp2 == 0) || (isinf(FpOp2) && FpOp1 == 0)) {
601 mid = NAN;
602 }
603 FpDest = FpDest - mid;
624 float mid = FpOp1 * FpOp2;
625 if ((isinf(FpOp1) && FpOp2 == 0) || (isinf(FpOp2) && FpOp1 == 0)) {
626 mid = NAN;
627 }
628 FpDest = FpDest - mid;
629 Fpscr = setVfpFpscr(Fpscr, state);
604 '''
605 vmlsSIop = InstObjParams("vmlss", "VmlsS", "VfpRegRegRegOp",
606 { "code": vmlsSCode,
607 "predicate_test": predicateTest }, [])
608 header_output += VfpRegRegRegOpDeclare.subst(vmlsSIop);
609 decoder_output += VfpRegRegRegOpConstructor.subst(vmlsSIop);
610 exec_output += PredOpExecute.subst(vmlsSIop);
611
612 vmlsDCode = '''
613 IntDoubleUnion cOp1, cOp2, cDest;
614 cOp1.bits = ((uint64_t)FpOp1P0.uw | ((uint64_t)FpOp1P1.uw << 32));
615 cOp2.bits = ((uint64_t)FpOp2P0.uw | ((uint64_t)FpOp2P1.uw << 32));
616 cDest.bits = ((uint64_t)FpDestP0.uw | ((uint64_t)FpDestP1.uw << 32));
630 '''
631 vmlsSIop = InstObjParams("vmlss", "VmlsS", "VfpRegRegRegOp",
632 { "code": vmlsSCode,
633 "predicate_test": predicateTest }, [])
634 header_output += VfpRegRegRegOpDeclare.subst(vmlsSIop);
635 decoder_output += VfpRegRegRegOpConstructor.subst(vmlsSIop);
636 exec_output += PredOpExecute.subst(vmlsSIop);
637
638 vmlsDCode = '''
639 IntDoubleUnion cOp1, cOp2, cDest;
640 cOp1.bits = ((uint64_t)FpOp1P0.uw | ((uint64_t)FpOp1P1.uw << 32));
641 cOp2.bits = ((uint64_t)FpOp2P0.uw | ((uint64_t)FpOp2P1.uw << 32));
642 cDest.bits = ((uint64_t)FpDestP0.uw | ((uint64_t)FpDestP1.uw << 32));
643 VfpSavedState state = prepVfpFpscr(Fpscr);
617 double mid = cOp1.fp * cOp2.fp;
618 if ((isinf(cOp1.fp) && cOp2.fp == 0) ||
619 (isinf(cOp2.fp) && cOp1.fp == 0)) {
620 mid = NAN;
621 }
622 cDest.fp = cDest.fp - mid;
644 double mid = cOp1.fp * cOp2.fp;
645 if ((isinf(cOp1.fp) && cOp2.fp == 0) ||
646 (isinf(cOp2.fp) && cOp1.fp == 0)) {
647 mid = NAN;
648 }
649 cDest.fp = cDest.fp - mid;
650 Fpscr = setVfpFpscr(Fpscr, state);
623 FpDestP0.uw = cDest.bits;
624 FpDestP1.uw = cDest.bits >> 32;
625 '''
626 vmlsDIop = InstObjParams("vmlsd", "VmlsD", "VfpRegRegRegOp",
627 { "code": vmlsDCode,
628 "predicate_test": predicateTest }, [])
629 header_output += VfpRegRegRegOpDeclare.subst(vmlsDIop);
630 decoder_output += VfpRegRegRegOpConstructor.subst(vmlsDIop);
631 exec_output += PredOpExecute.subst(vmlsDIop);
632
633 vnmlaSCode = '''
651 FpDestP0.uw = cDest.bits;
652 FpDestP1.uw = cDest.bits >> 32;
653 '''
654 vmlsDIop = InstObjParams("vmlsd", "VmlsD", "VfpRegRegRegOp",
655 { "code": vmlsDCode,
656 "predicate_test": predicateTest }, [])
657 header_output += VfpRegRegRegOpDeclare.subst(vmlsDIop);
658 decoder_output += VfpRegRegRegOpConstructor.subst(vmlsDIop);
659 exec_output += PredOpExecute.subst(vmlsDIop);
660
661 vnmlaSCode = '''
662 VfpSavedState state = prepVfpFpscr(Fpscr);
634 float mid = FpOp1 * FpOp2;
635 if ((isinf(FpOp1) && FpOp2 == 0) || (isinf(FpOp2) && FpOp1 == 0)) {
636 mid = NAN;
637 }
638 FpDest = -FpDest - mid;
663 float mid = FpOp1 * FpOp2;
664 if ((isinf(FpOp1) && FpOp2 == 0) || (isinf(FpOp2) && FpOp1 == 0)) {
665 mid = NAN;
666 }
667 FpDest = -FpDest - mid;
668 Fpscr = setVfpFpscr(Fpscr, state);
639 '''
640 vnmlaSIop = InstObjParams("vnmlas", "VnmlaS", "VfpRegRegRegOp",
641 { "code": vnmlaSCode,
642 "predicate_test": predicateTest }, [])
643 header_output += VfpRegRegRegOpDeclare.subst(vnmlaSIop);
644 decoder_output += VfpRegRegRegOpConstructor.subst(vnmlaSIop);
645 exec_output += PredOpExecute.subst(vnmlaSIop);
646
647 vnmlaDCode = '''
648 IntDoubleUnion cOp1, cOp2, cDest;
649 cOp1.bits = ((uint64_t)FpOp1P0.uw | ((uint64_t)FpOp1P1.uw << 32));
650 cOp2.bits = ((uint64_t)FpOp2P0.uw | ((uint64_t)FpOp2P1.uw << 32));
651 cDest.bits = ((uint64_t)FpDestP0.uw | ((uint64_t)FpDestP1.uw << 32));
669 '''
670 vnmlaSIop = InstObjParams("vnmlas", "VnmlaS", "VfpRegRegRegOp",
671 { "code": vnmlaSCode,
672 "predicate_test": predicateTest }, [])
673 header_output += VfpRegRegRegOpDeclare.subst(vnmlaSIop);
674 decoder_output += VfpRegRegRegOpConstructor.subst(vnmlaSIop);
675 exec_output += PredOpExecute.subst(vnmlaSIop);
676
677 vnmlaDCode = '''
678 IntDoubleUnion cOp1, cOp2, cDest;
679 cOp1.bits = ((uint64_t)FpOp1P0.uw | ((uint64_t)FpOp1P1.uw << 32));
680 cOp2.bits = ((uint64_t)FpOp2P0.uw | ((uint64_t)FpOp2P1.uw << 32));
681 cDest.bits = ((uint64_t)FpDestP0.uw | ((uint64_t)FpDestP1.uw << 32));
682 VfpSavedState state = prepVfpFpscr(Fpscr);
652 double mid = cOp1.fp * cOp2.fp;
653 if ((isinf(cOp1.fp) && cOp2.fp == 0) ||
654 (isinf(cOp2.fp) && cOp1.fp == 0)) {
655 mid = NAN;
656 }
657 cDest.fp = -cDest.fp - mid;
683 double mid = cOp1.fp * cOp2.fp;
684 if ((isinf(cOp1.fp) && cOp2.fp == 0) ||
685 (isinf(cOp2.fp) && cOp1.fp == 0)) {
686 mid = NAN;
687 }
688 cDest.fp = -cDest.fp - mid;
689 Fpscr = setVfpFpscr(Fpscr, state);
658 FpDestP0.uw = cDest.bits;
659 FpDestP1.uw = cDest.bits >> 32;
660 '''
661 vnmlaDIop = InstObjParams("vnmlad", "VnmlaD", "VfpRegRegRegOp",
662 { "code": vnmlaDCode,
663 "predicate_test": predicateTest }, [])
664 header_output += VfpRegRegRegOpDeclare.subst(vnmlaDIop);
665 decoder_output += VfpRegRegRegOpConstructor.subst(vnmlaDIop);
666 exec_output += PredOpExecute.subst(vnmlaDIop);
667
668 vnmlsSCode = '''
690 FpDestP0.uw = cDest.bits;
691 FpDestP1.uw = cDest.bits >> 32;
692 '''
693 vnmlaDIop = InstObjParams("vnmlad", "VnmlaD", "VfpRegRegRegOp",
694 { "code": vnmlaDCode,
695 "predicate_test": predicateTest }, [])
696 header_output += VfpRegRegRegOpDeclare.subst(vnmlaDIop);
697 decoder_output += VfpRegRegRegOpConstructor.subst(vnmlaDIop);
698 exec_output += PredOpExecute.subst(vnmlaDIop);
699
700 vnmlsSCode = '''
701 VfpSavedState state = prepVfpFpscr(Fpscr);
669 float mid = FpOp1 * FpOp2;
670 if ((isinf(FpOp1) && FpOp2 == 0) || (isinf(FpOp2) && FpOp1 == 0)) {
671 mid = NAN;
672 }
673 FpDest = -FpDest + mid;
702 float mid = FpOp1 * FpOp2;
703 if ((isinf(FpOp1) && FpOp2 == 0) || (isinf(FpOp2) && FpOp1 == 0)) {
704 mid = NAN;
705 }
706 FpDest = -FpDest + mid;
707 Fpscr = setVfpFpscr(Fpscr, state);
674 '''
675 vnmlsSIop = InstObjParams("vnmlss", "VnmlsS", "VfpRegRegRegOp",
676 { "code": vnmlsSCode,
677 "predicate_test": predicateTest }, [])
678 header_output += VfpRegRegRegOpDeclare.subst(vnmlsSIop);
679 decoder_output += VfpRegRegRegOpConstructor.subst(vnmlsSIop);
680 exec_output += PredOpExecute.subst(vnmlsSIop);
681
682 vnmlsDCode = '''
683 IntDoubleUnion cOp1, cOp2, cDest;
684 cOp1.bits = ((uint64_t)FpOp1P0.uw | ((uint64_t)FpOp1P1.uw << 32));
685 cOp2.bits = ((uint64_t)FpOp2P0.uw | ((uint64_t)FpOp2P1.uw << 32));
686 cDest.bits = ((uint64_t)FpDestP0.uw | ((uint64_t)FpDestP1.uw << 32));
708 '''
709 vnmlsSIop = InstObjParams("vnmlss", "VnmlsS", "VfpRegRegRegOp",
710 { "code": vnmlsSCode,
711 "predicate_test": predicateTest }, [])
712 header_output += VfpRegRegRegOpDeclare.subst(vnmlsSIop);
713 decoder_output += VfpRegRegRegOpConstructor.subst(vnmlsSIop);
714 exec_output += PredOpExecute.subst(vnmlsSIop);
715
716 vnmlsDCode = '''
717 IntDoubleUnion cOp1, cOp2, cDest;
718 cOp1.bits = ((uint64_t)FpOp1P0.uw | ((uint64_t)FpOp1P1.uw << 32));
719 cOp2.bits = ((uint64_t)FpOp2P0.uw | ((uint64_t)FpOp2P1.uw << 32));
720 cDest.bits = ((uint64_t)FpDestP0.uw | ((uint64_t)FpDestP1.uw << 32));
721 VfpSavedState state = prepVfpFpscr(Fpscr);
687 double mid = cOp1.fp * cOp2.fp;
688 if ((isinf(cOp1.fp) && cOp2.fp == 0) ||
689 (isinf(cOp2.fp) && cOp1.fp == 0)) {
690 mid = NAN;
691 }
692 cDest.fp = -cDest.fp + mid;
722 double mid = cOp1.fp * cOp2.fp;
723 if ((isinf(cOp1.fp) && cOp2.fp == 0) ||
724 (isinf(cOp2.fp) && cOp1.fp == 0)) {
725 mid = NAN;
726 }
727 cDest.fp = -cDest.fp + mid;
728 Fpscr = setVfpFpscr(Fpscr, state);
693 FpDestP0.uw = cDest.bits;
694 FpDestP1.uw = cDest.bits >> 32;
695 '''
696 vnmlsDIop = InstObjParams("vnmlsd", "VnmlsD", "VfpRegRegRegOp",
697 { "code": vnmlsDCode,
698 "predicate_test": predicateTest }, [])
699 header_output += VfpRegRegRegOpDeclare.subst(vnmlsDIop);
700 decoder_output += VfpRegRegRegOpConstructor.subst(vnmlsDIop);
701 exec_output += PredOpExecute.subst(vnmlsDIop);
702
703 vnmulSCode = '''
729 FpDestP0.uw = cDest.bits;
730 FpDestP1.uw = cDest.bits >> 32;
731 '''
732 vnmlsDIop = InstObjParams("vnmlsd", "VnmlsD", "VfpRegRegRegOp",
733 { "code": vnmlsDCode,
734 "predicate_test": predicateTest }, [])
735 header_output += VfpRegRegRegOpDeclare.subst(vnmlsDIop);
736 decoder_output += VfpRegRegRegOpConstructor.subst(vnmlsDIop);
737 exec_output += PredOpExecute.subst(vnmlsDIop);
738
739 vnmulSCode = '''
740 VfpSavedState state = prepVfpFpscr(Fpscr);
704 float mid = FpOp1 * FpOp2;
705 if ((isinf(FpOp1) && FpOp2 == 0) || (isinf(FpOp2) && FpOp1 == 0)) {
706 mid = NAN;
707 }
708 FpDest = -mid;
741 float mid = FpOp1 * FpOp2;
742 if ((isinf(FpOp1) && FpOp2 == 0) || (isinf(FpOp2) && FpOp1 == 0)) {
743 mid = NAN;
744 }
745 FpDest = -mid;
746 Fpscr = setVfpFpscr(Fpscr, state);
709 '''
710 vnmulSIop = InstObjParams("vnmuls", "VnmulS", "VfpRegRegRegOp",
711 { "code": vnmulSCode,
712 "predicate_test": predicateTest }, [])
713 header_output += VfpRegRegRegOpDeclare.subst(vnmulSIop);
714 decoder_output += VfpRegRegRegOpConstructor.subst(vnmulSIop);
715 exec_output += PredOpExecute.subst(vnmulSIop);
716
717 vnmulDCode = '''
718 IntDoubleUnion cOp1, cOp2, cDest;
719 cOp1.bits = ((uint64_t)FpOp1P0.uw | ((uint64_t)FpOp1P1.uw << 32));
720 cOp2.bits = ((uint64_t)FpOp2P0.uw | ((uint64_t)FpOp2P1.uw << 32));
721 cDest.bits = ((uint64_t)FpDestP0.uw | ((uint64_t)FpDestP1.uw << 32));
747 '''
748 vnmulSIop = InstObjParams("vnmuls", "VnmulS", "VfpRegRegRegOp",
749 { "code": vnmulSCode,
750 "predicate_test": predicateTest }, [])
751 header_output += VfpRegRegRegOpDeclare.subst(vnmulSIop);
752 decoder_output += VfpRegRegRegOpConstructor.subst(vnmulSIop);
753 exec_output += PredOpExecute.subst(vnmulSIop);
754
755 vnmulDCode = '''
756 IntDoubleUnion cOp1, cOp2, cDest;
757 cOp1.bits = ((uint64_t)FpOp1P0.uw | ((uint64_t)FpOp1P1.uw << 32));
758 cOp2.bits = ((uint64_t)FpOp2P0.uw | ((uint64_t)FpOp2P1.uw << 32));
759 cDest.bits = ((uint64_t)FpDestP0.uw | ((uint64_t)FpDestP1.uw << 32));
760 VfpSavedState state = prepVfpFpscr(Fpscr);
722 double mid = cOp1.fp * cOp2.fp;
723 if ((isinf(cOp1.fp) && cOp2.fp == 0) ||
724 (isinf(cOp2.fp) && cOp1.fp == 0)) {
725 mid = NAN;
726 }
727 cDest.fp = -mid;
761 double mid = cOp1.fp * cOp2.fp;
762 if ((isinf(cOp1.fp) && cOp2.fp == 0) ||
763 (isinf(cOp2.fp) && cOp1.fp == 0)) {
764 mid = NAN;
765 }
766 cDest.fp = -mid;
767 Fpscr = setVfpFpscr(Fpscr, state);
728 FpDestP0.uw = cDest.bits;
729 FpDestP1.uw = cDest.bits >> 32;
730 '''
731 vnmulDIop = InstObjParams("vnmuld", "VnmulD", "VfpRegRegRegOp",
732 { "code": vnmulDCode,
733 "predicate_test": predicateTest }, [])
734 header_output += VfpRegRegRegOpDeclare.subst(vnmulDIop);
735 decoder_output += VfpRegRegRegOpConstructor.subst(vnmulDIop);
736 exec_output += PredOpExecute.subst(vnmulDIop);
737
738 vcvtUIntFpSCode = '''
768 FpDestP0.uw = cDest.bits;
769 FpDestP1.uw = cDest.bits >> 32;
770 '''
771 vnmulDIop = InstObjParams("vnmuld", "VnmulD", "VfpRegRegRegOp",
772 { "code": vnmulDCode,
773 "predicate_test": predicateTest }, [])
774 header_output += VfpRegRegRegOpDeclare.subst(vnmulDIop);
775 decoder_output += VfpRegRegRegOpConstructor.subst(vnmulDIop);
776 exec_output += PredOpExecute.subst(vnmulDIop);
777
778 vcvtUIntFpSCode = '''
779 VfpSavedState state = prepVfpFpscr(Fpscr);
739 FpDest = FpOp1.uw;
780 FpDest = FpOp1.uw;
781 Fpscr = setVfpFpscr(Fpscr, state);
740 '''
741 vcvtUIntFpSIop = InstObjParams("vcvt", "VcvtUIntFpS", "VfpRegRegOp",
742 { "code": vcvtUIntFpSCode,
743 "predicate_test": predicateTest }, [])
744 header_output += VfpRegRegOpDeclare.subst(vcvtUIntFpSIop);
745 decoder_output += VfpRegRegOpConstructor.subst(vcvtUIntFpSIop);
746 exec_output += PredOpExecute.subst(vcvtUIntFpSIop);
747
748 vcvtUIntFpDCode = '''
749 IntDoubleUnion cDest;
782 '''
783 vcvtUIntFpSIop = InstObjParams("vcvt", "VcvtUIntFpS", "VfpRegRegOp",
784 { "code": vcvtUIntFpSCode,
785 "predicate_test": predicateTest }, [])
786 header_output += VfpRegRegOpDeclare.subst(vcvtUIntFpSIop);
787 decoder_output += VfpRegRegOpConstructor.subst(vcvtUIntFpSIop);
788 exec_output += PredOpExecute.subst(vcvtUIntFpSIop);
789
790 vcvtUIntFpDCode = '''
791 IntDoubleUnion cDest;
792 VfpSavedState state = prepVfpFpscr(Fpscr);
750 cDest.fp = (uint64_t)FpOp1P0.uw;
793 cDest.fp = (uint64_t)FpOp1P0.uw;
794 Fpscr = setVfpFpscr(Fpscr, state);
751 FpDestP0.uw = cDest.bits;
752 FpDestP1.uw = cDest.bits >> 32;
753 '''
754 vcvtUIntFpDIop = InstObjParams("vcvt", "VcvtUIntFpD", "VfpRegRegOp",
755 { "code": vcvtUIntFpDCode,
756 "predicate_test": predicateTest }, [])
757 header_output += VfpRegRegOpDeclare.subst(vcvtUIntFpDIop);
758 decoder_output += VfpRegRegOpConstructor.subst(vcvtUIntFpDIop);
759 exec_output += PredOpExecute.subst(vcvtUIntFpDIop);
760
761 vcvtSIntFpSCode = '''
795 FpDestP0.uw = cDest.bits;
796 FpDestP1.uw = cDest.bits >> 32;
797 '''
798 vcvtUIntFpDIop = InstObjParams("vcvt", "VcvtUIntFpD", "VfpRegRegOp",
799 { "code": vcvtUIntFpDCode,
800 "predicate_test": predicateTest }, [])
801 header_output += VfpRegRegOpDeclare.subst(vcvtUIntFpDIop);
802 decoder_output += VfpRegRegOpConstructor.subst(vcvtUIntFpDIop);
803 exec_output += PredOpExecute.subst(vcvtUIntFpDIop);
804
805 vcvtSIntFpSCode = '''
806 VfpSavedState state = prepVfpFpscr(Fpscr);
762 FpDest = FpOp1.sw;
807 FpDest = FpOp1.sw;
808 Fpscr = setVfpFpscr(Fpscr, state);
763 '''
764 vcvtSIntFpSIop = InstObjParams("vcvt", "VcvtSIntFpS", "VfpRegRegOp",
765 { "code": vcvtSIntFpSCode,
766 "predicate_test": predicateTest }, [])
767 header_output += VfpRegRegOpDeclare.subst(vcvtSIntFpSIop);
768 decoder_output += VfpRegRegOpConstructor.subst(vcvtSIntFpSIop);
769 exec_output += PredOpExecute.subst(vcvtSIntFpSIop);
770
771 vcvtSIntFpDCode = '''
772 IntDoubleUnion cDest;
809 '''
810 vcvtSIntFpSIop = InstObjParams("vcvt", "VcvtSIntFpS", "VfpRegRegOp",
811 { "code": vcvtSIntFpSCode,
812 "predicate_test": predicateTest }, [])
813 header_output += VfpRegRegOpDeclare.subst(vcvtSIntFpSIop);
814 decoder_output += VfpRegRegOpConstructor.subst(vcvtSIntFpSIop);
815 exec_output += PredOpExecute.subst(vcvtSIntFpSIop);
816
817 vcvtSIntFpDCode = '''
818 IntDoubleUnion cDest;
819 VfpSavedState state = prepVfpFpscr(Fpscr);
773 cDest.fp = FpOp1P0.sw;
820 cDest.fp = FpOp1P0.sw;
821 Fpscr = setVfpFpscr(Fpscr, state);
774 FpDestP0.uw = cDest.bits;
775 FpDestP1.uw = cDest.bits >> 32;
776 '''
777 vcvtSIntFpDIop = InstObjParams("vcvt", "VcvtSIntFpD", "VfpRegRegOp",
778 { "code": vcvtSIntFpDCode,
779 "predicate_test": predicateTest }, [])
780 header_output += VfpRegRegOpDeclare.subst(vcvtSIntFpDIop);
781 decoder_output += VfpRegRegOpConstructor.subst(vcvtSIntFpDIop);
782 exec_output += PredOpExecute.subst(vcvtSIntFpDIop);
783
784 vcvtFpUIntSCode = '''
822 FpDestP0.uw = cDest.bits;
823 FpDestP1.uw = cDest.bits >> 32;
824 '''
825 vcvtSIntFpDIop = InstObjParams("vcvt", "VcvtSIntFpD", "VfpRegRegOp",
826 { "code": vcvtSIntFpDCode,
827 "predicate_test": predicateTest }, [])
828 header_output += VfpRegRegOpDeclare.subst(vcvtSIntFpDIop);
829 decoder_output += VfpRegRegOpConstructor.subst(vcvtSIntFpDIop);
830 exec_output += PredOpExecute.subst(vcvtSIntFpDIop);
831
832 vcvtFpUIntSCode = '''
833 VfpSavedState state = prepVfpFpscr(Fpscr);
785 FpDest.uw = FpOp1;
834 FpDest.uw = FpOp1;
835 Fpscr = setVfpFpscr(Fpscr, state);
786 '''
787 vcvtFpUIntSIop = InstObjParams("vcvt", "VcvtFpUIntS", "VfpRegRegOp",
788 { "code": vcvtFpUIntSCode,
789 "predicate_test": predicateTest }, [])
790 header_output += VfpRegRegOpDeclare.subst(vcvtFpUIntSIop);
791 decoder_output += VfpRegRegOpConstructor.subst(vcvtFpUIntSIop);
792 exec_output += PredOpExecute.subst(vcvtFpUIntSIop);
793
794 vcvtFpUIntDCode = '''
795 IntDoubleUnion cOp1;
796 cOp1.bits = ((uint64_t)FpOp1P0.uw | ((uint64_t)FpOp1P1.uw << 32));
836 '''
837 vcvtFpUIntSIop = InstObjParams("vcvt", "VcvtFpUIntS", "VfpRegRegOp",
838 { "code": vcvtFpUIntSCode,
839 "predicate_test": predicateTest }, [])
840 header_output += VfpRegRegOpDeclare.subst(vcvtFpUIntSIop);
841 decoder_output += VfpRegRegOpConstructor.subst(vcvtFpUIntSIop);
842 exec_output += PredOpExecute.subst(vcvtFpUIntSIop);
843
844 vcvtFpUIntDCode = '''
845 IntDoubleUnion cOp1;
846 cOp1.bits = ((uint64_t)FpOp1P0.uw | ((uint64_t)FpOp1P1.uw << 32));
847 VfpSavedState state = prepVfpFpscr(Fpscr);
797 uint64_t result = cOp1.fp;
848 uint64_t result = cOp1.fp;
849 Fpscr = setVfpFpscr(Fpscr, state);
798 FpDestP0.uw = result;
799 '''
800 vcvtFpUIntDIop = InstObjParams("vcvt", "VcvtFpUIntD", "VfpRegRegOp",
801 { "code": vcvtFpUIntDCode,
802 "predicate_test": predicateTest }, [])
803 header_output += VfpRegRegOpDeclare.subst(vcvtFpUIntDIop);
804 decoder_output += VfpRegRegOpConstructor.subst(vcvtFpUIntDIop);
805 exec_output += PredOpExecute.subst(vcvtFpUIntDIop);
806
807 vcvtFpSIntSCode = '''
850 FpDestP0.uw = result;
851 '''
852 vcvtFpUIntDIop = InstObjParams("vcvt", "VcvtFpUIntD", "VfpRegRegOp",
853 { "code": vcvtFpUIntDCode,
854 "predicate_test": predicateTest }, [])
855 header_output += VfpRegRegOpDeclare.subst(vcvtFpUIntDIop);
856 decoder_output += VfpRegRegOpConstructor.subst(vcvtFpUIntDIop);
857 exec_output += PredOpExecute.subst(vcvtFpUIntDIop);
858
859 vcvtFpSIntSCode = '''
860 VfpSavedState state = prepVfpFpscr(Fpscr);
808 FpDest.sw = FpOp1;
861 FpDest.sw = FpOp1;
862 Fpscr = setVfpFpscr(Fpscr, state);
809 '''
810 vcvtFpSIntSIop = InstObjParams("vcvt", "VcvtFpSIntS", "VfpRegRegOp",
811 { "code": vcvtFpSIntSCode,
812 "predicate_test": predicateTest }, [])
813 header_output += VfpRegRegOpDeclare.subst(vcvtFpSIntSIop);
814 decoder_output += VfpRegRegOpConstructor.subst(vcvtFpSIntSIop);
815 exec_output += PredOpExecute.subst(vcvtFpSIntSIop);
816
817 vcvtFpSIntDCode = '''
818 IntDoubleUnion cOp1;
819 cOp1.bits = ((uint64_t)FpOp1P0.uw | ((uint64_t)FpOp1P1.uw << 32));
863 '''
864 vcvtFpSIntSIop = InstObjParams("vcvt", "VcvtFpSIntS", "VfpRegRegOp",
865 { "code": vcvtFpSIntSCode,
866 "predicate_test": predicateTest }, [])
867 header_output += VfpRegRegOpDeclare.subst(vcvtFpSIntSIop);
868 decoder_output += VfpRegRegOpConstructor.subst(vcvtFpSIntSIop);
869 exec_output += PredOpExecute.subst(vcvtFpSIntSIop);
870
871 vcvtFpSIntDCode = '''
872 IntDoubleUnion cOp1;
873 cOp1.bits = ((uint64_t)FpOp1P0.uw | ((uint64_t)FpOp1P1.uw << 32));
874 VfpSavedState state = prepVfpFpscr(Fpscr);
820 int64_t result = cOp1.fp;
875 int64_t result = cOp1.fp;
876 Fpscr = setVfpFpscr(Fpscr, state);
821 FpDestP0.uw = result;
822 '''
823 vcvtFpSIntDIop = InstObjParams("vcvt", "VcvtFpSIntD", "VfpRegRegOp",
824 { "code": vcvtFpSIntDCode,
825 "predicate_test": predicateTest }, [])
826 header_output += VfpRegRegOpDeclare.subst(vcvtFpSIntDIop);
827 decoder_output += VfpRegRegOpConstructor.subst(vcvtFpSIntDIop);
828 exec_output += PredOpExecute.subst(vcvtFpSIntDIop);
829
830 vcvtFpSFpDCode = '''
831 IntDoubleUnion cDest;
877 FpDestP0.uw = result;
878 '''
879 vcvtFpSIntDIop = InstObjParams("vcvt", "VcvtFpSIntD", "VfpRegRegOp",
880 { "code": vcvtFpSIntDCode,
881 "predicate_test": predicateTest }, [])
882 header_output += VfpRegRegOpDeclare.subst(vcvtFpSIntDIop);
883 decoder_output += VfpRegRegOpConstructor.subst(vcvtFpSIntDIop);
884 exec_output += PredOpExecute.subst(vcvtFpSIntDIop);
885
886 vcvtFpSFpDCode = '''
887 IntDoubleUnion cDest;
888 VfpSavedState state = prepVfpFpscr(Fpscr);
832 cDest.fp = FpOp1;
889 cDest.fp = FpOp1;
890 Fpscr = setVfpFpscr(Fpscr, state);
833 FpDestP0.uw = cDest.bits;
834 FpDestP1.uw = cDest.bits >> 32;
835 '''
836 vcvtFpSFpDIop = InstObjParams("vcvt", "VcvtFpSFpD", "VfpRegRegOp",
837 { "code": vcvtFpSFpDCode,
838 "predicate_test": predicateTest }, [])
839 header_output += VfpRegRegOpDeclare.subst(vcvtFpSFpDIop);
840 decoder_output += VfpRegRegOpConstructor.subst(vcvtFpSFpDIop);
841 exec_output += PredOpExecute.subst(vcvtFpSFpDIop);
842
843 vcvtFpDFpSCode = '''
844 IntDoubleUnion cOp1;
845 cOp1.bits = ((uint64_t)FpOp1P0.uw | ((uint64_t)FpOp1P1.uw << 32));
891 FpDestP0.uw = cDest.bits;
892 FpDestP1.uw = cDest.bits >> 32;
893 '''
894 vcvtFpSFpDIop = InstObjParams("vcvt", "VcvtFpSFpD", "VfpRegRegOp",
895 { "code": vcvtFpSFpDCode,
896 "predicate_test": predicateTest }, [])
897 header_output += VfpRegRegOpDeclare.subst(vcvtFpSFpDIop);
898 decoder_output += VfpRegRegOpConstructor.subst(vcvtFpSFpDIop);
899 exec_output += PredOpExecute.subst(vcvtFpSFpDIop);
900
901 vcvtFpDFpSCode = '''
902 IntDoubleUnion cOp1;
903 cOp1.bits = ((uint64_t)FpOp1P0.uw | ((uint64_t)FpOp1P1.uw << 32));
904 VfpSavedState state = prepVfpFpscr(Fpscr);
846 FpDest = cOp1.fp;
905 FpDest = cOp1.fp;
906 Fpscr = setVfpFpscr(Fpscr, state);
847 '''
848 vcvtFpDFpSIop = InstObjParams("vcvt", "VcvtFpDFpS", "VfpRegRegOp",
849 { "code": vcvtFpDFpSCode,
850 "predicate_test": predicateTest }, [])
851 header_output += VfpRegRegOpDeclare.subst(vcvtFpDFpSIop);
852 decoder_output += VfpRegRegOpConstructor.subst(vcvtFpDFpSIop);
853 exec_output += PredOpExecute.subst(vcvtFpDFpSIop);
854

--- 85 unchanged lines hidden ---
907 '''
908 vcvtFpDFpSIop = InstObjParams("vcvt", "VcvtFpDFpS", "VfpRegRegOp",
909 { "code": vcvtFpDFpSCode,
910 "predicate_test": predicateTest }, [])
911 header_output += VfpRegRegOpDeclare.subst(vcvtFpDFpSIop);
912 decoder_output += VfpRegRegOpConstructor.subst(vcvtFpDFpSIop);
913 exec_output += PredOpExecute.subst(vcvtFpDFpSIop);
914

--- 85 unchanged lines hidden ---