diff options
author | Steven J. Hill <Steven.Hill@imgtec.com> | 2013-03-25 14:44:04 -0400 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2013-05-09 11:55:20 -0400 |
commit | cd574704ec06904c7b7dd2c897fea5a54f944a95 (patch) | |
tree | a91ee907bc6cd965b6539165dedc41a25365b62a /arch | |
parent | 3e9f37e885f22e703ec6fe730eba4aebdb5dd5e0 (diff) |
MIPS: MIPS16e: Add instruction formats.
Add structures for all the MIPS16e instructions. Also add the
enumerations for all the bit fields for opcodes, functions, etc.
Signed-off-by: Steven J. Hill <Steven.Hill@imgtec.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/mips/include/uapi/asm/inst.h | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/arch/mips/include/uapi/asm/inst.h b/arch/mips/include/uapi/asm/inst.h index 23ec2f53666f..0f4aec2ad1e6 100644 --- a/arch/mips/include/uapi/asm/inst.h +++ b/arch/mips/include/uapi/asm/inst.h | |||
@@ -424,6 +424,47 @@ enum mm_16d_minor_op { | |||
424 | }; | 424 | }; |
425 | 425 | ||
426 | /* | 426 | /* |
427 | * (MIPS16e) opcodes. | ||
428 | */ | ||
429 | enum MIPS16e_ops { | ||
430 | MIPS16e_jal_op = 003, | ||
431 | MIPS16e_ld_op = 007, | ||
432 | MIPS16e_i8_op = 014, | ||
433 | MIPS16e_sd_op = 017, | ||
434 | MIPS16e_lb_op = 020, | ||
435 | MIPS16e_lh_op = 021, | ||
436 | MIPS16e_lwsp_op = 022, | ||
437 | MIPS16e_lw_op = 023, | ||
438 | MIPS16e_lbu_op = 024, | ||
439 | MIPS16e_lhu_op = 025, | ||
440 | MIPS16e_lwpc_op = 026, | ||
441 | MIPS16e_lwu_op = 027, | ||
442 | MIPS16e_sb_op = 030, | ||
443 | MIPS16e_sh_op = 031, | ||
444 | MIPS16e_swsp_op = 032, | ||
445 | MIPS16e_sw_op = 033, | ||
446 | MIPS16e_rr_op = 035, | ||
447 | MIPS16e_extend_op = 036, | ||
448 | MIPS16e_i64_op = 037, | ||
449 | }; | ||
450 | |||
451 | enum MIPS16e_i64_func { | ||
452 | MIPS16e_ldsp_func, | ||
453 | MIPS16e_sdsp_func, | ||
454 | MIPS16e_sdrasp_func, | ||
455 | MIPS16e_dadjsp_func, | ||
456 | MIPS16e_ldpc_func, | ||
457 | }; | ||
458 | |||
459 | enum MIPS16e_rr_func { | ||
460 | MIPS16e_jr_func, | ||
461 | }; | ||
462 | |||
463 | enum MIPS6e_i8_func { | ||
464 | MIPS16e_swrasp_func = 02, | ||
465 | }; | ||
466 | |||
467 | /* | ||
427 | * (microMIPS & MIPS16e) NOP instruction. | 468 | * (microMIPS & MIPS16e) NOP instruction. |
428 | */ | 469 | */ |
429 | #define MM_NOP16 0x0c00 | 470 | #define MM_NOP16 0x0c00 |
@@ -745,6 +786,64 @@ struct mm16_r5_format { /* Load/store from stack pointer format */ | |||
745 | ;)))) | 786 | ;)))) |
746 | }; | 787 | }; |
747 | 788 | ||
789 | /* | ||
790 | * MIPS16e instruction formats (16-bit length) | ||
791 | */ | ||
792 | struct m16e_rr { | ||
793 | BITFIELD_FIELD(unsigned int opcode : 5, | ||
794 | BITFIELD_FIELD(unsigned int rx : 3, | ||
795 | BITFIELD_FIELD(unsigned int nd : 1, | ||
796 | BITFIELD_FIELD(unsigned int l : 1, | ||
797 | BITFIELD_FIELD(unsigned int ra : 1, | ||
798 | BITFIELD_FIELD(unsigned int func : 5, | ||
799 | ;)))))) | ||
800 | }; | ||
801 | |||
802 | struct m16e_jal { | ||
803 | BITFIELD_FIELD(unsigned int opcode : 5, | ||
804 | BITFIELD_FIELD(unsigned int x : 1, | ||
805 | BITFIELD_FIELD(unsigned int imm20_16 : 5, | ||
806 | BITFIELD_FIELD(signed int imm25_21 : 5, | ||
807 | ;)))) | ||
808 | }; | ||
809 | |||
810 | struct m16e_i64 { | ||
811 | BITFIELD_FIELD(unsigned int opcode : 5, | ||
812 | BITFIELD_FIELD(unsigned int func : 3, | ||
813 | BITFIELD_FIELD(unsigned int imm : 8, | ||
814 | ;))) | ||
815 | }; | ||
816 | |||
817 | struct m16e_ri64 { | ||
818 | BITFIELD_FIELD(unsigned int opcode : 5, | ||
819 | BITFIELD_FIELD(unsigned int func : 3, | ||
820 | BITFIELD_FIELD(unsigned int ry : 3, | ||
821 | BITFIELD_FIELD(unsigned int imm : 5, | ||
822 | ;)))) | ||
823 | }; | ||
824 | |||
825 | struct m16e_ri { | ||
826 | BITFIELD_FIELD(unsigned int opcode : 5, | ||
827 | BITFIELD_FIELD(unsigned int rx : 3, | ||
828 | BITFIELD_FIELD(unsigned int imm : 8, | ||
829 | ;))) | ||
830 | }; | ||
831 | |||
832 | struct m16e_rri { | ||
833 | BITFIELD_FIELD(unsigned int opcode : 5, | ||
834 | BITFIELD_FIELD(unsigned int rx : 3, | ||
835 | BITFIELD_FIELD(unsigned int ry : 3, | ||
836 | BITFIELD_FIELD(unsigned int imm : 5, | ||
837 | ;)))) | ||
838 | }; | ||
839 | |||
840 | struct m16e_i8 { | ||
841 | BITFIELD_FIELD(unsigned int opcode : 5, | ||
842 | BITFIELD_FIELD(unsigned int func : 3, | ||
843 | BITFIELD_FIELD(unsigned int imm : 8, | ||
844 | ;))) | ||
845 | }; | ||
846 | |||
748 | union mips_instruction { | 847 | union mips_instruction { |
749 | unsigned int word; | 848 | unsigned int word; |
750 | unsigned short halfword[2]; | 849 | unsigned short halfword[2]; |
@@ -782,4 +881,15 @@ union mips_instruction { | |||
782 | struct mm16_r5_format mm16_r5_format; | 881 | struct mm16_r5_format mm16_r5_format; |
783 | }; | 882 | }; |
784 | 883 | ||
884 | union mips16e_instruction { | ||
885 | unsigned int full : 16; | ||
886 | struct m16e_rr rr; | ||
887 | struct m16e_jal jal; | ||
888 | struct m16e_i64 i64; | ||
889 | struct m16e_ri64 ri64; | ||
890 | struct m16e_ri ri; | ||
891 | struct m16e_rri rri; | ||
892 | struct m16e_i8 i8; | ||
893 | }; | ||
894 | |||
785 | #endif /* _UAPI_ASM_INST_H */ | 895 | #endif /* _UAPI_ASM_INST_H */ |