pike.git / src / code / amd64.c

version» Context lines:

pike.git/src/code/amd64.c:71:    }    l->n_label_uses = 0;    l->addr = PIKE_PC;   }      static void ib( char x )   {    add_to_program( x );   }    + #if 0   static void iw( short x )   {    add_to_program( x>>8 );    add_to_program( x );   } -  + #endif      static void id( int x )   {    add_to_program( (x)&0xff );    add_to_program( (x>>8)&0xff );    add_to_program( (x>>16)&0xff );    add_to_program( (x>>24)&0xff );   }      /* x86 opcodes */
pike.git/src/code/amd64.c:292:    modrm( 3, 4, from_reg );    }    else    {    opcode( 0xc1 );    modrm( 3, 4, from_reg );    ib( shift );    }   }    + #if 0   static void shl_reg_reg( enum amd64_reg reg, enum amd64_reg sreg)   {    if( sreg != P_REG_RCX )    Pike_fatal("Not supported\n");       rex( 1, 0, 0, reg );    opcode( 0xd3 );    modrm( 3, 4, reg );   } -  + #endif      static void shl_reg32_reg( enum amd64_reg reg, enum amd64_reg sreg)   {    if( sreg != P_REG_RCX )    Pike_fatal("Not supported\n");    rex( 0, 0, 0, reg );    opcode( 0xd3 );    modrm( 3, 4, reg );   }    -  + #if 0   static void shl_reg_mem( enum amd64_reg reg, enum amd64_reg mem, int offset)   {    if( reg == P_REG_RCX )    Pike_fatal("Not supported\n");    mov_mem8_reg( mem, offset, P_REG_RCX );    shl_reg_reg( reg, P_REG_RCX );   } -  + #endif      static void shr_reg_imm( enum amd64_reg from_reg, int shift )   {    rex( 1, from_reg, 0, 0 );    if( shift == 1 )    {    opcode( 0xd1 ); /* SAR */    modrm( 3, 7, from_reg );    }    else
pike.git/src/code/amd64.c:340:    modrm( 3, 7, from_reg );    ib( shift );    }   }      static void clear_reg( enum amd64_reg reg )   {    xor_reg_reg( reg, reg );   }    + #if 0   static void neg_reg( enum amd64_reg reg )   {    rex(1,0,0,reg);    opcode(0xf7);    modrm(3,3,reg);   } -  + #endif      static void mov_imm_reg( long imm, enum amd64_reg reg )   {    if( (imm > 0x7fffffffLL) || (imm < -0x80000000LL) )    {    rex(1,0,0,reg);    opcode(0xb8 | (reg&0x7)); /* mov imm64 -> reg64 */    id( (imm & 0xffffffffLL) );    id( ((imm >> 32)&0xffffffffLL) );    }
pike.git/src/code/amd64.c:412:    rex(1, from_reg, 0, to_reg );    low_mov_reg_mem( from_reg, to_reg, offset );   }      static void mov_reg_mem32( enum amd64_reg from_reg, enum amd64_reg to_reg, ptrdiff_t offset )   {    rex(0, from_reg, 0, to_reg );    low_mov_reg_mem( from_reg, to_reg, offset );   }    + #if 0   static void mov_reg_mem16( enum amd64_reg from_reg, enum amd64_reg to_reg, ptrdiff_t offset )   {    opcode( 0x66 );    rex(0, from_reg, 0, to_reg );    low_mov_reg_mem( from_reg, to_reg, offset );   } -  + #endif            static void mov_imm_mem( long imm, enum amd64_reg to_reg, ptrdiff_t offset )   {    if( imm >= -0x80000000LL && imm <= 0x7fffffffLL )    {    rex( 1, 0, 0, to_reg );    opcode( 0xc7 ); /* mov imm32 -> r/m64 (sign extend)*/    offset_modrm_sib( offset, 0, to_reg );
pike.git/src/code/amd64.c:848:    res = PIKE_PC;    id( rel );    return res;   }      #define jne(X) jnz(X)   #define je(X) jz(X)   static void jmp( struct label *l ) { return jump_rel8( l, 0xeb ); }   static void jo( struct label *l ) { return jump_rel8( l, 0x70 ); }   static void jno( struct label *l ) { return jump_rel8( l, 0x71 ); } + #if 0   static void jc( struct label *l ) { return jump_rel8( l, 0x72 ); }   static void jnc( struct label *l ) { return jump_rel8( l, 0x73 ); } -  + #endif   static void jz( struct label *l ) { return jump_rel8( l, 0x74 ); }   static void jnz( struct label *l ) { return jump_rel8( l, 0x75 ); }   static void js( struct label *l ) { return jump_rel8( l, 0x78 ); }   static void jl( struct label *l ) { return jump_rel8( l, 0x7c ); }   static void jge( struct label *l ) { return jump_rel8( l, 0x7d ); }   static void jle( struct label *l ) { return jump_rel8( l, 0x7e ); } -  + #if 0   static void jg( struct label *l ) { return jump_rel8( l, 0x7f ); } -  + #endif    -  +    #define LABELS() struct label label_A, label_B, label_C, label_D, label_E;label_A.addr = -1;label_A.n_label_uses = 0;label_B.addr = -1;label_B.n_label_uses = 0;label_C.addr = -1;label_C.n_label_uses = 0;label_D.addr = -1;label_D.n_label_uses = 0;label_E.addr=-1;label_E.n_label_uses=0;   #define LABEL_A label(&label_A)   #define LABEL_B label(&label_B)   #define LABEL_C label(&label_C)   #define LABEL_D label(&label_D)   #define LABEL_E label(&label_E)      static void amd64_ins_branch_check_threads_etc(int code_only);   static int func_start = 0;   
pike.git/src/code/amd64.c:1215:    P_REG_RAX);    mov_reg_mem(P_REG_RCX, sp_reg, OFFSETOF(svalue, u.object));    add_reg_imm(P_REG_RAX, fun);    add_imm_mem( 1, P_REG_RCX,(INT32)OFFSETOF(object, refs));    shl_reg_imm(P_REG_RAX, 16);    add_reg_imm(P_REG_RAX, PIKE_T_FUNCTION);    mov_reg_mem(P_REG_RAX, sp_reg, OFFSETOF(svalue, type));    amd64_add_sp(1);   }    + #ifdef PIKE_DEBUG   static void amd64_stack_error(void)   {    Pike_fatal("Stack error\n");   } -  + #endif      void amd64_update_pc(void)   {    INT32 tmp = PIKE_PC, disp;    const enum amd64_reg tmp_reg = P_REG_RAX;       if(amd64_prev_stored_pc == - 1)    {    amd64_load_fp_reg();    mov_rip_imm_reg(tmp - PIKE_PC, tmp_reg);