aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2010-08-27 01:43:32 +0200
committerMike Pall <mike>2010-08-27 01:43:32 +0200
commit1b57266668adf49c0deccd79d64a2c496416b4be (patch)
treec89b74b1def54e2793afab76f3877694bb7ed30e
parent4aa8757aac08fcd340649d9850f7bf88d5911f98 (diff)
downloadluajit-1b57266668adf49c0deccd79d64a2c496416b4be.tar.gz
luajit-1b57266668adf49c0deccd79d64a2c496416b4be.tar.bz2
luajit-1b57266668adf49c0deccd79d64a2c496416b4be.zip
PPC: Add SPE instructions to DynASM PowerPC module.
-rw-r--r--dynasm/dasm_ppc.lua288
1 files changed, 287 insertions, 1 deletions
diff --git a/dynasm/dasm_ppc.lua b/dynasm/dasm_ppc.lua
index acea7cc1..ca75271f 100644
--- a/dynasm/dasm_ppc.lua
+++ b/dynasm/dasm_ppc.lua
@@ -248,10 +248,10 @@ local map_op = {
248 ["addic._3"] = "34000000RRI", 248 ["addic._3"] = "34000000RRI",
249 addi_3 = "38000000RRI", 249 addi_3 = "38000000RRI",
250 li_2 = "38000000RI", 250 li_2 = "38000000RI",
251 la_2 = "38000000RD",
251 addis_3 = "3c000000RRI", 252 addis_3 = "3c000000RRI",
252 lis_2 = "3c000000RI", 253 lis_2 = "3c000000RI",
253 lus_2 = "3c000000RU", 254 lus_2 = "3c000000RU",
254 la_2 = "3c000000RD",
255 bc_3 = "40000000AAK", 255 bc_3 = "40000000AAK",
256 bcl_3 = "40000001AAK", 256 bcl_3 = "40000001AAK",
257 bdnz_1 = "42000000K", 257 bdnz_1 = "42000000K",
@@ -526,6 +526,282 @@ local map_op = {
526 fctidz_2 = "fc00065eF-F.", 526 fctidz_2 = "fc00065eF-F.",
527 fcfid_2 = "fc00069cF-F.", 527 fcfid_2 = "fc00069cF-F.",
528 528
529 -- Primary opcode 4, SPE APU extension:
530 evaddw_3 = "10000200RRR",
531 evaddiw_3 = "10000202RAR~",
532 evsubw_3 = "10000204RRR~",
533 evsubiw_3 = "10000206RAR~",
534 evabs_2 = "10000208RR",
535 evneg_2 = "10000209RR",
536 evextsb_2 = "1000020aRR",
537 evextsh_2 = "1000020bRR",
538 evrndw_2 = "1000020cRR",
539 evcntlzw_2 = "1000020dRR",
540 evcntlsw_2 = "1000020eRR",
541 brinc_3 = "1000020fRRR",
542 evand_3 = "10000211RRR",
543 evandc_3 = "10000212RRR",
544 evxor_3 = "10000216RRR",
545 evor_3 = "10000217RRR",
546 evmr_2 = "10000217RR=",
547 evnor_3 = "10000218RRR",
548 evnot_2 = "10000218RR=",
549 eveqv_3 = "10000219RRR",
550 evorc_3 = "1000021bRRR",
551 evnand_3 = "1000021eRRR",
552 evsrwu_3 = "10000220RRR",
553 evsrws_3 = "10000221RRR",
554 evsrwiu_3 = "10000222RRA",
555 evsrwis_3 = "10000223RRA",
556 evslw_3 = "10000224RRR",
557 evslwi_3 = "10000226RRA",
558 evrlw_3 = "10000228RRR",
559 evsplati_2 = "10000229RS",
560 evrlwi_3 = "1000022aRRA",
561 evsplatfi_2 = "1000022bRS",
562 evmergehi_3 = "1000022cRRR",
563 evmergelo_3 = "1000022dRRR",
564 evcmpgtu_3 = "10000230XRR",
565 evcmpgtu_2 = "10000230-RR",
566 evcmpgts_3 = "10000231XRR",
567 evcmpgts_2 = "10000231-RR",
568 evcmpltu_3 = "10000232XRR",
569 evcmpltu_2 = "10000232-RR",
570 evcmplts_3 = "10000233XRR",
571 evcmplts_2 = "10000233-RR",
572 evcmpeq_3 = "10000234XRR",
573 evcmpeq_2 = "10000234-RR",
574 evsel_4 = "10000278RRRW",
575 evsel_3 = "10000278RRR",
576 evfsadd_3 = "10000280RRR",
577 evfssub_3 = "10000281RRR",
578 evfsabs_2 = "10000284RR",
579 evfsnabs_2 = "10000285RR",
580 evfsneg_2 = "10000286RR",
581 evfsmul_3 = "10000288RRR",
582 evfsdiv_3 = "10000289RRR",
583 evfscmpgt_3 = "1000028cXRR",
584 evfscmpgt_2 = "1000028c-RR",
585 evfscmplt_3 = "1000028dXRR",
586 evfscmplt_2 = "1000028d-RR",
587 evfscmpeq_3 = "1000028eXRR",
588 evfscmpeq_2 = "1000028e-RR",
589 evfscfui_2 = "10000290R-R",
590 evfscfsi_2 = "10000291R-R",
591 evfscfuf_2 = "10000292R-R",
592 evfscfsf_2 = "10000293R-R",
593 evfsctui_2 = "10000294R-R",
594 evfsctsi_2 = "10000295R-R",
595 evfsctuf_2 = "10000296R-R",
596 evfsctsf_2 = "10000297R-R",
597 evfsctuiz_2 = "10000298R-R",
598 evfsctsiz_2 = "1000029aR-R",
599 evfststgt_3 = "1000029cXRR",
600 evfststgt_2 = "1000029c-RR",
601 evfststlt_3 = "1000029dXRR",
602 evfststlt_2 = "1000029d-RR",
603 evfststeq_3 = "1000029eXRR",
604 evfststeq_2 = "1000029e-RR",
605 efsadd_3 = "100002c0RRR",
606 efssub_3 = "100002c1RRR",
607 efsabs_2 = "100002c4RR",
608 efsnabs_2 = "100002c5RR",
609 efsneg_2 = "100002c6RR",
610 efsmul_3 = "100002c8RRR",
611 efsdiv_3 = "100002c9RRR",
612 efscmpgt_3 = "100002ccXRR",
613 efscmpgt_2 = "100002cc-RR",
614 efscmplt_3 = "100002cdXRR",
615 efscmplt_2 = "100002cd-RR",
616 efscmpeq_3 = "100002ceXRR",
617 efscmpeq_2 = "100002ce-RR",
618 efscfd_2 = "100002cfR-R",
619 efscfui_2 = "100002d0R-R",
620 efscfsi_2 = "100002d1R-R",
621 efscfuf_2 = "100002d2R-R",
622 efscfsf_2 = "100002d3R-R",
623 efsctui_2 = "100002d4R-R",
624 efsctsi_2 = "100002d5R-R",
625 efsctuf_2 = "100002d6R-R",
626 efsctsf_2 = "100002d7R-R",
627 efsctuiz_2 = "100002d8R-R",
628 efsctsiz_2 = "100002daR-R",
629 efststgt_3 = "100002dcXRR",
630 efststgt_2 = "100002dc-RR",
631 efststlt_3 = "100002ddXRR",
632 efststlt_2 = "100002dd-RR",
633 efststeq_3 = "100002deXRR",
634 efststeq_2 = "100002de-RR",
635 efdadd_3 = "100002e0RRR",
636 efdsub_3 = "100002e1RRR",
637 efdcfuid_2 = "100002e2R-R",
638 efdcfsid_2 = "100002e3R-R",
639 efdabs_2 = "100002e4RR",
640 efdnabs_2 = "100002e5RR",
641 efdneg_2 = "100002e6RR",
642 efdmul_3 = "100002e8RRR",
643 efddiv_3 = "100002e9RRR",
644 efdctuidz_2 = "100002eaR-R",
645 efdctsidz_2 = "100002ebR-R",
646 efdcmpgt_3 = "100002ecXRR",
647 efdcmpgt_2 = "100002ec-RR",
648 efdcmplt_3 = "100002edXRR",
649 efdcmplt_2 = "100002ed-RR",
650 efdcmpeq_3 = "100002eeXRR",
651 efdcmpeq_2 = "100002ee-RR",
652 efdcfs_2 = "100002efR-R",
653 efdcfui_2 = "100002f0R-R",
654 efdcfsi_2 = "100002f1R-R",
655 efdcfuf_2 = "100002f2R-R",
656 efdcfsf_2 = "100002f3R-R",
657 efdctui_2 = "100002f4R-R",
658 efdctsi_2 = "100002f5R-R",
659 efdctuf_2 = "100002f6R-R",
660 efdctsf_2 = "100002f7R-R",
661 efdctuiz_2 = "100002f8R-R",
662 efdctsiz_2 = "100002faR-R",
663 efdtstgt_3 = "100002fcXRR",
664 efdtstgt_2 = "100002fc-RR",
665 efdtstlt_3 = "100002fdXRR",
666 efdtstlt_2 = "100002fd-RR",
667 efdtsteq_3 = "100002feXRR",
668 efdtsteq_2 = "100002fe-RR",
669 evlddx_3 = "10000300RRR",
670 evldd_2 = "10000301R8",
671 evldwx_3 = "10000302RRR",
672 evldw_2 = "10000303R8",
673 evldhx_3 = "10000304RRR",
674 evldh_2 = "10000305R8",
675 evlwhex_3 = "10000310RRR",
676 evlwhe_2 = "10000311R4",
677 evlwhoux_3 = "10000314RRR",
678 evlwhou_2 = "10000315R4",
679 evlwhosx_3 = "10000316RRR",
680 evlwhos_2 = "10000317R4",
681 evstddx_3 = "10000320RRR",
682 evstdd_2 = "10000321R8",
683 evstdwx_3 = "10000322RRR",
684 evstdw_2 = "10000323R8",
685 evstdhx_3 = "10000324RRR",
686 evstdh_2 = "10000325R8",
687 evstwhex_3 = "10000330RRR",
688 evstwhe_2 = "10000331R4",
689 evstwhox_3 = "10000334RRR",
690 evstwho_2 = "10000335R4",
691 evstwwex_3 = "10000338RRR",
692 evstwwe_2 = "10000339R4",
693 evstwwox_3 = "1000033cRRR",
694 evstwwo_2 = "1000033dR4",
695 evmhessf_3 = "10000403RRR",
696 evmhossf_3 = "10000407RRR",
697 evmheumi_3 = "10000408RRR",
698 evmhesmi_3 = "10000409RRR",
699 evmhesmf_3 = "1000040bRRR",
700 evmhoumi_3 = "1000040cRRR",
701 evmhosmi_3 = "1000040dRRR",
702 evmhosmf_3 = "1000040fRRR",
703 evmhessfa_3 = "10000423RRR",
704 evmhossfa_3 = "10000427RRR",
705 evmheumia_3 = "10000428RRR",
706 evmhesmia_3 = "10000429RRR",
707 evmhesmfa_3 = "1000042bRRR",
708 evmhoumia_3 = "1000042cRRR",
709 evmhosmia_3 = "1000042dRRR",
710 evmhosmfa_3 = "1000042fRRR",
711 evmwhssf_3 = "10000447RRR",
712 evmwlumi_3 = "10000448RRR",
713 evmwhumi_3 = "1000044cRRR",
714 evmwhsmi_3 = "1000044dRRR",
715 evmwhsmf_3 = "1000044fRRR",
716 evmwssf_3 = "10000453RRR",
717 evmwumi_3 = "10000458RRR",
718 evmwsmi_3 = "10000459RRR",
719 evmwsmf_3 = "1000045bRRR",
720 evmwhssfa_3 = "10000467RRR",
721 evmwlumia_3 = "10000468RRR",
722 evmwhumia_3 = "1000046cRRR",
723 evmwhsmia_3 = "1000046dRRR",
724 evmwhsmfa_3 = "1000046fRRR",
725 evmwssfa_3 = "10000473RRR",
726 evmwumia_3 = "10000478RRR",
727 evmwsmia_3 = "10000479RRR",
728 evmwsmfa_3 = "1000047bRRR",
729 evmra_2 = "100004c4RR",
730 evdivws_3 = "100004c6RRR",
731 evdivwu_3 = "100004c7RRR",
732 evmwssfaa_3 = "10000553RRR",
733 evmwumiaa_3 = "10000558RRR",
734 evmwsmiaa_3 = "10000559RRR",
735 evmwsmfaa_3 = "1000055bRRR",
736 evmwssfan_3 = "100005d3RRR",
737 evmwumian_3 = "100005d8RRR",
738 evmwsmian_3 = "100005d9RRR",
739 evmwsmfan_3 = "100005dbRRR",
740 evmergehilo_3 = "1000022eRRR",
741 evmergelohi_3 = "1000022fRRR",
742 evlhhesplatx_3 = "10000308RRR",
743 evlhhesplat_2 = "10000309R2",
744 evlhhousplatx_3 = "1000030cRRR",
745 evlhhousplat_2 = "1000030dR2",
746 evlhhossplatx_3 = "1000030eRRR",
747 evlhhossplat_2 = "1000030fR2",
748 evlwwsplatx_3 = "10000318RRR",
749 evlwwsplat_2 = "10000319R4",
750 evlwhsplatx_3 = "1000031cRRR",
751 evlwhsplat_2 = "1000031dR4",
752 evaddusiaaw_2 = "100004c0RR",
753 evaddssiaaw_2 = "100004c1RR",
754 evsubfusiaaw_2 = "100004c2RR",
755 evsubfssiaaw_2 = "100004c3RR",
756 evaddumiaaw_2 = "100004c8RR",
757 evaddsmiaaw_2 = "100004c9RR",
758 evsubfumiaaw_2 = "100004caRR",
759 evsubfsmiaaw_2 = "100004cbRR",
760 evmheusiaaw_3 = "10000500RRR",
761 evmhessiaaw_3 = "10000501RRR",
762 evmhessfaaw_3 = "10000503RRR",
763 evmhousiaaw_3 = "10000504RRR",
764 evmhossiaaw_3 = "10000505RRR",
765 evmhossfaaw_3 = "10000507RRR",
766 evmheumiaaw_3 = "10000508RRR",
767 evmhesmiaaw_3 = "10000509RRR",
768 evmhesmfaaw_3 = "1000050bRRR",
769 evmhoumiaaw_3 = "1000050cRRR",
770 evmhosmiaaw_3 = "1000050dRRR",
771 evmhosmfaaw_3 = "1000050fRRR",
772 evmhegumiaa_3 = "10000528RRR",
773 evmhegsmiaa_3 = "10000529RRR",
774 evmhegsmfaa_3 = "1000052bRRR",
775 evmhogumiaa_3 = "1000052cRRR",
776 evmhogsmiaa_3 = "1000052dRRR",
777 evmhogsmfaa_3 = "1000052fRRR",
778 evmwlusiaaw_3 = "10000540RRR",
779 evmwlssiaaw_3 = "10000541RRR",
780 evmwlumiaaw_3 = "10000548RRR",
781 evmwlsmiaaw_3 = "10000549RRR",
782 evmheusianw_3 = "10000580RRR",
783 evmhessianw_3 = "10000581RRR",
784 evmhessfanw_3 = "10000583RRR",
785 evmhousianw_3 = "10000584RRR",
786 evmhossianw_3 = "10000585RRR",
787 evmhossfanw_3 = "10000587RRR",
788 evmheumianw_3 = "10000588RRR",
789 evmhesmianw_3 = "10000589RRR",
790 evmhesmfanw_3 = "1000058bRRR",
791 evmhoumianw_3 = "1000058cRRR",
792 evmhosmianw_3 = "1000058dRRR",
793 evmhosmfanw_3 = "1000058fRRR",
794 evmhegumian_3 = "100005a8RRR",
795 evmhegsmian_3 = "100005a9RRR",
796 evmhegsmfan_3 = "100005abRRR",
797 evmhogumian_3 = "100005acRRR",
798 evmhogsmian_3 = "100005adRRR",
799 evmhogsmfan_3 = "100005afRRR",
800 evmwlusianw_3 = "100005c0RRR",
801 evmwlssianw_3 = "100005c1RRR",
802 evmwlumianw_3 = "100005c8RRR",
803 evmwlsmianw_3 = "100005c9RRR",
804
529 -- NYI: some 64 bit PowerPC and Book E instructions: 805 -- NYI: some 64 bit PowerPC and Book E instructions:
530 -- rldicl, rldicr, rldic, rldimi, rldcl, rldcr, sradi, 64 bit ext. add/sub, 806 -- rldicl, rldicr, rldic, rldimi, rldcl, rldcr, sradi, 64 bit ext. add/sub,
531 -- extended addressing branches, cache management, loads and stores 807 -- extended addressing branches, cache management, loads and stores
@@ -720,16 +996,26 @@ map_op[".template__"] = function(params, template, nparams)
720 rs = rs - 5; op = op + parse_fpr(params[n]) * 2^rs; n = n + 1 996 rs = rs - 5; op = op + parse_fpr(params[n]) * 2^rs; n = n + 1
721 elseif p == "A" then 997 elseif p == "A" then
722 rs = rs - 5; op = op + parse_imm(params[n], 5, rs, 0, false); n = n + 1 998 rs = rs - 5; op = op + parse_imm(params[n], 5, rs, 0, false); n = n + 1
999 elseif p == "S" then
1000 rs = rs - 5; op = op + parse_imm(params[n], 5, rs, 0, true); n = n + 1
723 elseif p == "I" then 1001 elseif p == "I" then
724 op = op + parse_imm(params[n], 16, 0, 0, true); n = n + 1 1002 op = op + parse_imm(params[n], 16, 0, 0, true); n = n + 1
725 elseif p == "U" then 1003 elseif p == "U" then
726 op = op + parse_imm(params[n], 16, 0, 0, false); n = n + 1 1004 op = op + parse_imm(params[n], 16, 0, 0, false); n = n + 1
727 elseif p == "D" then 1005 elseif p == "D" then
728 op = op + parse_disp(params[n]); n = n + 1 1006 op = op + parse_disp(params[n]); n = n + 1
1007 elseif p == "2" then
1008 op = op + parse_u5disp(params[n], 1); n = n + 1
1009 elseif p == "4" then
1010 op = op + parse_u5disp(params[n], 2); n = n + 1
1011 elseif p == "8" then
1012 op = op + parse_u5disp(params[n], 3); n = n + 1
729 elseif p == "C" then 1013 elseif p == "C" then
730 rs = rs - 5; op = op + parse_cond(params[n]) * 2^rs; n = n + 1 1014 rs = rs - 5; op = op + parse_cond(params[n]) * 2^rs; n = n + 1
731 elseif p == "X" then 1015 elseif p == "X" then
732 rs = rs - 5; op = op + parse_cr(params[n]) * 2^(rs+2); n = n + 1 1016 rs = rs - 5; op = op + parse_cr(params[n]) * 2^(rs+2); n = n + 1
1017 elseif p == "W" then
1018 op = op + parse_cr(params[n]); n = n + 1
733 elseif p == "J" or p == "K" then 1019 elseif p == "J" or p == "K" then
734 local mode, n, s = parse_label(params[n], false) 1020 local mode, n, s = parse_label(params[n], false)
735 if p == "K" then n = n + 2048 end 1021 if p == "K" then n = n + 2048 end