Ignore:
Timestamp:
Jul 22, 2007, 4:58:47 AM (17 years ago)
Author:
dai_9181
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler64/Opcode.h

    r220 r226  
    33#include <Type.h>
    44#include <Procedure.h>
    5 
    6 
    7 //レジスタを示す定数
    8 #define REG_EAX 1
    9 #define REG_EBX 2
    10 #define REG_ECX 3
    11 #define REG_EDX 4
    12 #define REG_ESP 5
    13 #define REG_EBP 6
    14 
    15 #define REGISTER_OPERAND(reg) (reg&0x07)
    16 
    17 #define REG_NON     -1
    18 #define REG_RAX     0x00    //reg:000
    19 #define REG_RCX     0x01    //reg:001
    20 #define REG_RDX     0x02    //reg:010
    21 #define REG_RBX     0x03    //reg:011
    22 #define REG_RSP     0x04    //reg:100
    23 #define REG_RBP     0x05    //reg:101
    24 #define REG_RSI     0x06    //reg:110
    25 #define REG_RDI     0x07    //reg:111
    26 #define REG_R8      0x08    //reg:000(REXプリフィックス)
    27 #define REG_R9      0x09    //reg:001(REXプリフィックス)
    28 #define REG_R10     0x0A    //reg:010(REXプリフィックス)
    29 #define REG_R11     0x0B    //reg:011(REXプリフィックス)
    30 #define REG_R12     0x0C    //reg:100(REXプリフィックス)
    31 #define REG_R13     0x0D    //reg:101(REXプリフィックス)
    32 #define REG_R14     0x0E    //reg:110(REXプリフィックス)
    33 #define REG_R15     0x0F    //reg:111(REXプリフィックス)
    34 
    35 #define REG_XMM0    0x10    //reg:000
    36 #define REG_XMM1    0x11    //reg:001
    37 #define REG_XMM2    0x12    //reg:010
    38 #define REG_XMM3    0x13    //reg:011
    39 #define REG_XMM4    0x14    //reg:100
    40 #define REG_XMM5    0x15    //reg:101
    41 #define REG_XMM6    0x16    //reg:110
    42 #define REG_XMM7    0x17    //reg:111
    43 #define REG_XMM8    0x18    //reg:000
    44 #define REG_XMM9    0x19    //reg:001
    45 #define REG_XMM10   0x1A    //reg:010
    46 #define REG_XMM11   0x1B    //reg:011
    47 #define REG_XMM12   0x1C    //reg:100
    48 #define REG_XMM13   0x1D    //reg:101
    49 #define REG_XMM14   0x1E    //reg:110
    50 #define REG_XMM15   0x1F    //reg:111
    51 
    52 #define IS_XMM_REG(reg) (reg&0x10)
    53 
     5#include "MachineFixed.h"
    546
    557
     
    426378
    427379
    428 
    429 ////////////////////////////////
    430 // AMD64機械語生成に利用する関数郡
    431 ////////////////////////////////
    432 
    433 //Mod(モード)
    434 #define MOD_BASE        (char)0x00
    435 #define MOD_DISP32      (char)0xFF
    436 #define MOD_BASE_DISP8  (char)0x40
    437 #define MOD_BASE_DISP32 (char)0x80
    438 #define MOD_REG             (char)0xC0
    439 
    440 #define USE_OFFSET 1
    441 #define NON_OFFSET 0
    442 
    443 //amd64_main.cpp
    444380BOOL IsSafeReg(int reg);
    445 void op_push(int reg);
    446 void op_push_value(long data);
    447 void op_pop(int reg);
    448 void op_mov_RV                  (int op_size,int reg,int i32data);
    449 void op_mov_RV64                (int reg,_int64 i64data);
    450 void op_mov_RM                  (int op_size,int reg,int base_reg,int offset,char mod);
    451 void op_mov_RM_ex               (int op_size,int reg,int base_reg1,int base_reg2,int offset,BOOL bUseOffset);
    452 void op_mov_MR                  (int op_size,int reg,int base_reg,int offset,char mod);
    453 void op_mov_MR_ex               (int op_size,int reg,int base_reg1,int base_reg2,int offset,BOOL bUseOffset);
    454 void op_mov_MV                  (int op_size,int base_reg,int offset,BOOL bUseOffset,int i32data);
    455 void op_mov_RR                  (int reg1,int reg2);
    456 void op_mov64_ToReg             (int reg,_int64 i64data);
    457 void op_mov64_ToReg             (int reg,int i32data);
    458 void op_movsxd                  (int reg64,int reg32);
    459 void op_movsx64_FromReg16       (int reg64,int reg16);
    460 void op_movsx64_FromReg8        (int reg64,int reg8);
    461 void op_movsx32_FromReg16       (int reg32,int reg16);
    462 void op_movsx32_FromReg8        (int reg32,int reg8);
    463 void op_movsx16_FromReg8        (int reg32,int reg8);
    464 void op_inc                     (int reg);
    465 void op_dec                     (int reg);
    466 void op_add_RM                  (int op_size,int reg,int base_reg,int offset,char mod);
    467 void op_add_RV              (int reg,int offset);
    468 void op_add64_reg               (int reg1,int reg2);
    469 void op_add32_reg               (int reg1,int reg2);
    470 void op_sub_RV                  (int op_size,int reg,int i32data);
    471 void op_sub64_reg               (int reg1,int reg2);
    472 void op_sub32_reg               (int reg1,int reg2);
    473 void op_sbb_RR                  ( int op_size, int reg1, int reg2 );
    474 void op_imul_RR             (int op_size,int reg1,int reg2);
    475 void op_imul_RV             (int op_size,int reg,int i32data);
    476 void op_div64_reg               (int reg);
    477 void op_idiv64_reg              (int reg);
    478 void op_shl_reg                 (int op_size,int reg);
    479 void op_sar_reg                 (int op_size,int reg);
    480 void op_shr_reg                 (int op_size,int reg);
    481 void op_and_reg                 (int op_size,int reg1,int reg2);
    482 void op_and64_value             (int reg,int offset);
    483 void op_and32_value             (int reg,int offset);
    484 void op_or_reg                  (int op_size,int reg1,int reg2);
    485 void op_xor_reg                 (int op_size,int reg1,int reg2);
    486 void op_not_reg                 (int op_size,int reg);
    487 void op_neg                     ( int reg );
    488 void op_test                    (int reg1,int reg2);
    489 void op_cmp_reg                 (int op_size,int reg1,int reg2);
    490 void op_cmp_value               (int op_size,int reg,char byte_data);
    491 void op_setne                   (int reg);
    492 void op_movlpd_MR               (int xmm_reg,int base_reg,int offset,char mod);
    493 void op_movlpd_RM               (int xmm_reg,int base_reg,int offset,char mod);
    494 void op_movsd_RR                (int xmm_reg1,int xmm_reg2);
    495 void op_movsd_MR                (int xmm_reg,int base_reg,int offset,char mod);
    496 void op_movss_RR                (int xmm_reg1,int xmm_reg2);
    497 void op_movss_RM                (int xmm_reg,int base_reg,int offset,char mod);
    498 void op_movss_MR                (int xmm_reg,int base_reg,int offset,char mod);
    499 void op_movd_RX                 (int reg,int xmm_reg);
    500 void op_cvtsd2ss                (int xmm_reg1,int xmm_reg2);
    501 void op_cvtss2sd                (int xmm_reg1,int xmm_reg2);
    502 void op_cvttsd2si_xmm           (int op_size,int reg,int xmm_reg);
    503 void op_cvttss2si_xmm           (int op_size,int reg,int xmm_reg);
    504 void op_cvtsi2sd_reg            (int op_size,int xmm_reg,int reg);
    505 void op_cvtsi2ss_reg            (int op_size,int xmm_reg,int reg);
    506 void op_comisd                  (int xmm_reg1,int xmm_reg2);
    507 void op_comiss                  (int xmm_reg1,int xmm_reg2);
    508 void op_rep_movs                (int op_size);
    509 void op_add_rsp(int num);
    510 void op_sub_rsp(int num);
    511 void op_add_esp(int num);
    512 void op_sub_esp(int num);
    513 void op_fld_ptr_esp(int type);
    514 void op_zero_reg(int reg);
    515 void op_call( const UserProc *pUserProc );
    516 void op_call( const DllProc *pDllProc );
    517 void op_ret();
Note: See TracChangeset for help on using the changeset viewer.