freebsd-dev/sys/alpha/include/inst.h
1999-08-28 01:08:13 +00:00

463 lines
12 KiB
C

/*-
* Copyright (c) 1998 Doug Rabson
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
#ifndef _MACHINE_INST_H_
#define _MACHINE_INST_H_
union alpha_instruction {
u_int32_t word;
struct {
u_int32_t argument : 26;
u_int32_t opcode : 6;
#define op_call_pal 0x00
#define op_lda 0x08
#define op_ldah 0x09
#define op_ldbu 0x0a
#define op_unop 0x0b
#define op_ldq_u 0x0b
#define op_ldwu 0x0c
#define op_stw 0x0d
#define op_stb 0x0e
#define op_stq_u 0x0f
#define op_inta 0x10
#define inta_addl 0x00
#define inta_s4addl 0x02
#define inta_subl 0x09
#define inta_s4subl 0x0b
#define inta_cmpbge 0x0f
#define inta_s8addl 0x12
#define inta_s8subl 0x1b
#define inta_cmpult 0x1d
#define inta_addq 0x20
#define inta_s4addq 0x22
#define inta_subq 0x29
#define inta_s4subq 0x2b
#define inta_cmpeq 0x2d
#define inta_s8addq 0x32
#define inta_s8subq 0x3b
#define inta_cmpule 0x3d
#define inta_addlv 0x40
#define inta_sublv 0x49
#define inta_cmplt 0x4d
#define inta_addqv 0x60
#define inta_subqv 0x69
#define inta_cmple 0x6d
#define op_intl 0x11
#define intl_and 0x00
#define intl_andnot 0x08
#define intl_bic 0x08
#define intl_cmovlbs 0x14
#define intl_cmovlbc 0x16
#define intl_or 0x20
#define intl_bis 0x20
#define intl_cmoveq 0x24
#define intl_cmovne 0x26
#define intl_ornot 0x28
#define intl_xor 0x40
#define intl_cmovlt 0x44
#define intl_cmovge 0x46
#define intl_eqv 0x48
#define intl_amask 0x61
#define intl_cmovle 0x64
#define intl_cmovgt 0x66
#define intl_implver 0x6c
#define op_ints 0x12
#define ints_mskbl 0x02
#define ints_extbl 0x06
#define ints_insbl 0x0b
#define ints_mskwl 0x12
#define ints_extwl 0x16
#define ints_inswl 0x1b
#define ints_mskll 0x22
#define ints_extll 0x26
#define ints_insll 0x2b
#define ints_zap 0x30
#define ints_zapnot 0x31
#define ints_mskql 0x32
#define ints_srl 0x34
#define ints_extql 0x36
#define ints_sll 0x39
#define ints_insql 0x3b
#define ints_sra 0x3c
#define ints_mskwh 0x52
#define ints_inswh 0x57
#define ints_extwh 0x5a
#define ints_msklh 0x62
#define ints_inslh 0x67
#define ints_extlh 0x6a
#define ints_mskqh 0x72
#define ints_insqh 0x77
#define ints_extqh 0x7a
#define op_intm 0x13
#define intm_mull 0x00
#define intm_mulq 0x20
#define intm_umulh 0x30
#define intm_mullv 0x40
#define intm_mulqv 0x60
#define op_opc14 0x14
#define op_fltv 0x15
#define op_flti 0x16
#define flti_addsc 0x000
#define flti_subsc 0x001
#define flti_mulsc 0x002
#define flti_divsc 0x003
#define flti_addtc 0x020
#define flti_subtc 0x021
#define flti_multc 0x022
#define flti_divtc 0x023
#define flti_cvttsc 0x02c
#define flti_cvttqc 0x02f
#define flti_cvtqsc 0x03c
#define flti_cvtqtc 0x03e
#define flti_addsm 0x040
#define flti_subsm 0x041
#define flti_mulsm 0x042
#define flti_divsm 0x043
#define flti_addtm 0x060
#define flti_subtm 0x061
#define flti_multm 0x062
#define flti_divtm 0x063
#define flti_cvttsm 0x06c
#define flti_cvttqm 0x06f
#define flti_cvtqsm 0x07c
#define flti_cvtqtm 0x07e
#define flti_adds 0x080
#define flti_subs 0x081
#define flti_muls 0x082
#define flti_divs 0x083
#define flti_addt 0x0a0
#define flti_subt 0x0a1
#define flti_mult 0x0a2
#define flti_divt 0x0a3
#define flti_cmptun 0x0a4
#define flti_cmpteq 0x0a5
#define flti_cmptlt 0x0a6
#define flti_cmptle 0x0a7
#define flti_cvtts 0x0ac
#define flti_cvttq 0x0af
#define flti_cvtqs 0x0bc
#define flti_cvtqt 0x0be
#define flti_addsd 0x0c0
#define flti_subsd 0x0c1
#define flti_mulsd 0x0c2
#define flti_divsd 0x0c3
#define flti_addtd 0x0e0
#define flti_subtd 0x0e1
#define flti_multd 0x0e2
#define flti_divtd 0x0e3
#define flti_cvttsd 0x0ec
#define flti_cvttqd 0x0ef
#define flti_cvtqsd 0x0fc
#define flti_cvtqtd 0x0fe
#define flti_addsuc 0x100
#define flti_subsuc 0x101
#define flti_mulsuc 0x102
#define flti_divsuc 0x103
#define flti_addtuc 0x120
#define flti_subtuc 0x121
#define flti_multuc 0x122
#define flti_divtuc 0x123
#define flti_cvttsuc 0x12c
#define flti_cvttqvc 0x12f
#define flti_addsum 0x140
#define flti_subsum 0x141
#define flti_mulsum 0x142
#define flti_divsum 0x143
#define flti_addtum 0x160
#define flti_subtum 0x161
#define flti_multum 0x162
#define flti_divtum 0x163
#define flti_cvttsum 0x16c
#define flti_cvttqvm 0x16f
#define flti_addsu 0x180
#define flti_subsu 0x181
#define flti_mulsu 0x182
#define flti_divsu 0x183
#define flti_addtu 0x1a0
#define flti_subtu 0x1a1
#define flti_multu 0x1a2
#define flti_divtu 0x1a3
#define flti_cvttsu 0x1ac
#define flti_cvttqv 0x1af
#define flti_addsud 0x1c0
#define flti_subsud 0x1c1
#define flti_mulsud 0x1c2
#define flti_divsud 0x1c3
#define flti_addtud 0x1e0
#define flti_subtud 0x1e1
#define flti_multud 0x1e2
#define flti_divtud 0x1e3
#define flti_cvttsud 0x1ec
#define flti_cvttqvd 0x1ef
#define flti_cvtst 0x2ac
#define flti_addssuc 0x500
#define flti_subssuc 0x501
#define flti_mulssuc 0x502
#define flti_divssuc 0x503
#define flti_addtsuc 0x520
#define flti_subtsuc 0x521
#define flti_multsuc 0x522
#define flti_divtsuc 0x523
#define flti_cvttssuc 0x52c
#define flti_cvttqsvc 0x52f
#define flti_addssum 0x540
#define flti_subssum 0x541
#define flti_mulssum 0x542
#define flti_divssum 0x543
#define flti_addtsum 0x560
#define flti_subtsum 0x561
#define flti_multsum 0x562
#define flti_divtsum 0x563
#define flti_cvttssum 0x56c
#define flti_cvttqsvm 0x56f
#define flti_addssu 0x580
#define flti_subssu 0x581
#define flti_mulssu 0x582
#define flti_divssu 0x583
#define flti_addtsu 0x5a0
#define flti_subtsu 0x5a1
#define flti_multsu 0x5a2
#define flti_divtsu 0x5a3
#define flti_cmptunsu 0x5a4
#define flti_cmpteqsu 0x5a5
#define flti_cmptltsu 0x5a6
#define flti_cmptlesu 0x5a7
#define flti_cvttssu 0x5ac
#define flti_cvttqsv 0x5af
#define flti_addssud 0x5c0
#define flti_subssud 0x5c1
#define flti_mulssud 0x5c2
#define flti_divssud 0x5c3
#define flti_addtsud 0x5e0
#define flti_subtsud 0x5e1
#define flti_multsud 0x5e2
#define flti_divtsud 0x5e3
#define flti_cvttssud 0x5ec
#define flti_cvttqsvd 0x5ef
#define flti_cvtsts 0x6ac
#define flti_addssuic 0x700
#define flti_subssuic 0x701
#define flti_mulssuic 0x702
#define flti_divssuic 0x703
#define flti_addtsuic 0x720
#define flti_subtsuic 0x721
#define flti_multsuic 0x722
#define flti_divtsuic 0x723
#define flti_cvttssuic 0x72c
#define flti_cvttqsvic 0x72f
#define flti_cvtqssuic 0x73c
#define flti_cvtqtsuic 0x73e
#define flti_addssuim 0x740
#define flti_subssuim 0x741
#define flti_mulssuim 0x742
#define flti_divssuim 0x743
#define flti_addtsuim 0x760
#define flti_subtsuim 0x761
#define flti_multsuim 0x762
#define flti_divtsuim 0x763
#define flti_cvttssuim 0x76c
#define flti_cvttqsvim 0x76f
#define flti_cvtqssuim 0x77c
#define flti_cvtqtsuim 0x77e
#define flti_addssui 0x780
#define flti_subssui 0x781
#define flti_mulssui 0x782
#define flti_divssui 0x783
#define flti_addtsui 0x7a0
#define flti_subtsui 0x7a1
#define flti_multsui 0x7a2
#define flti_divtsui 0x7a3
#define flti_cmptunsui 0x7a4
#define flti_cmpteqsui 0x7a5
#define flti_cmptltsui 0x7a6
#define flti_cmptlesui 0x7a7
#define flti_cvttssui 0x7ac
#define flti_cvttqsvi 0x7af
#define flti_cvtqssui 0x7bc
#define flti_cvtqtsui 0x7bc
#define flti_addssuid 0x7c0
#define flti_subssuid 0x7c1
#define flti_mulssuid 0x7c2
#define flti_divssuid 0x7c3
#define flti_addtsuid 0x7e0
#define flti_subtsuid 0x7e1
#define flti_multsuid 0x7e2
#define flti_divtsuid 0x7e3
#define flti_cvttssuid 0x7ec
#define flti_cvttqsvid 0x7ef
#define flti_cvtqssuid 0x7fc
#define flti_cvtqtsuid 0x7fc
#define op_fltl 0x17
#define fltl_cvtlq 0x010
#define fltl_cpys 0x020
#define fltl_cpysn 0x021
#define fltl_cpyse 0x022
#define fltl_mt_fpcr 0x024
#define fltl_mf_fpcr 0x025
#define fltl_fcmoveq 0x02a
#define fltl_fcmovne 0x02b
#define fltl_fcmovlt 0x02c
#define fltl_fcmovge 0x02d
#define fltl_fcmovle 0x02e
#define fltl_fcmovgt 0x02f
#define fltl_cvtql 0x030
#define fltl_cvtqlv 0x130
#define fltl_cvtqlsv 0x530
#define op_misc 0x18
#define misc_trapb 0x0000
#define misc_excb 0x0400
#define misc_mb 0x4000
#define misc_wmb 0x4400
#define misc_fetch 0x8000
#define misc_fetch_m 0xa000
#define misc_rpcc 0xc000
#define misc_rc 0xe000
#define misc_ecb 0xe800
#define misc_rs 0xf000
#define misc_wh64 0xf800
#define op_pal19 0x19
#define op_jsr 0x1a
#define op_pal1b 0x1b
#define op_pal1c 0x1c
#define op_pal1d 0x1d
#define op_pal1e 0x1e
#define op_pal1f 0x1f
#define op_ldf 0x20
#define op_ldg 0x21
#define op_lds 0x22
#define op_ldt 0x23
#define op_stf 0x24
#define op_stg 0x25
#define op_sts 0x26
#define op_stt 0x27
#define op_ldl 0x28
#define op_ldq 0x29
#define op_ldl_l 0x2a
#define op_ldq_l 0x2b
#define op_stl 0x2c
#define op_stq 0x2d
#define op_stl_c 0x2e
#define op_stq_c 0x2f
#define op_br 0x30
#define op_fbeq 0x31
#define op_fblt 0x32
#define op_fble 0x33
#define op_bsr 0x34
#define op_fbne 0x35
#define op_fbge 0x36
#define op_fbgt 0x37
#define op_blbc 0x38
#define op_beq 0x39
#define op_blt 0x3a
#define op_ble 0x3b
#define op_blbs 0x3c
#define op_bne 0x3d
#define op_bge 0x3e
#define op_bgt 0x3f
} common;
struct {
u_int32_t function : 16;
u_int32_t rb : 5;
u_int32_t ra : 5;
u_int32_t opcode : 6;
} memory_format;
struct {
u_int32_t hint : 14;
u_int32_t function : 2;
#define jsr_jmp 0
#define jsr_jsr 1
#define jsr_ret 2
#define jsr_jsr_coroutine 3
u_int32_t rb : 5;
u_int32_t ra : 5;
u_int32_t opcode : 6;
} j_format;
struct {
int32_t memory_displacement : 16;
u_int32_t rb : 5;
u_int32_t ra : 5;
u_int32_t opcode : 6;
} m_format;
struct {
u_int32_t rc : 5;
u_int32_t function : 7;
u_int32_t form : 1;
u_int32_t sbz : 3;
u_int32_t rb : 5;
u_int32_t ra : 5;
u_int32_t opcode : 6;
} o_format;
struct {
u_int32_t rc : 5;
u_int32_t function : 7;
u_int32_t form : 1;
u_int32_t literal : 8;
u_int32_t ra : 5;
u_int32_t opcode : 6;
} l_format;
struct {
u_int32_t fc : 5;
u_int32_t function : 11;
u_int32_t fb : 5;
u_int32_t fa : 5;
u_int32_t opcode : 6;
} f_format;
struct {
u_int32_t function : 26;
u_int32_t opcode : 6;
} pal_format;
struct {
int32_t branch_displacement : 21;
u_int32_t ra : 5;
u_int32_t opcode : 6;
} b_format;
};
#endif /* _MACHINE_INST_H_ */