Changeset 245 in dev for trunk/abdev/BasicCompiler_Common


Ignore:
Timestamp:
Jul 27, 2007, 8:02:22 PM (17 years ago)
Author:
dai_9181
Message:
 
Location:
trunk/abdev/BasicCompiler_Common
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h

    r244 r245  
    5252
    5353private:
    54 
    5554    // 部分スケジュールの管理
    56     typedef std::vector<PertialSchedule *> PertialSchedules;
     55    typedef std::vector<const PertialSchedule *> PertialSchedules;
    5756    PertialSchedules pertialSchedules;
    5857
     
    128127
    129128private:
    130     PertialSchedule *__jmp_op_format( char opcode, long offset, int op_size, bool isPertialSchedule = false, bool isSelfOpcodeOffset = false );
    131 public:
    132     PertialSchedule *op_jle( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
    133     PertialSchedule *op_jbe( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
    134     PertialSchedule *op_jge( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
    135     PertialSchedule *op_jae( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
    136     PertialSchedule *op_jl( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
    137     PertialSchedule *op_jb( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
    138     PertialSchedule *op_jg( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
    139     PertialSchedule *op_ja( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
    140     PertialSchedule *op_jne( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
    141     PertialSchedule *op_je( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
    142     PertialSchedule *op_jmp( long offset, int op_size = sizeof(char), bool isPertialSchedule = false, bool isSelfOpcodeOffset = false );
     129    const PertialSchedule *__jmp_op_format( char opcode, long offset, int op_size, bool isPertialSchedule = false, bool isSelfOpcodeOffset = false );
     130public:
     131    const PertialSchedule *op_jle( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
     132    const PertialSchedule *op_jbe( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
     133    const PertialSchedule *op_jge( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
     134    const PertialSchedule *op_jae( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
     135    const PertialSchedule *op_jl( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
     136    const PertialSchedule *op_jb( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
     137    const PertialSchedule *op_jg( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
     138    const PertialSchedule *op_ja( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
     139    const PertialSchedule *op_jne( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
     140    const PertialSchedule *op_je( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
     141    const PertialSchedule *op_jmp( long offset, int op_size = sizeof(char), bool isPertialSchedule = false, bool isSelfOpcodeOffset = false );
    143142    void op_jmp_continue();
    144143
  • trunk/abdev/BasicCompiler_Common/include/NativeCode.h

    r244 r245  
    241241        ObpPlus( sizeof(long) );
    242242    }
    243     void PutUserProcSchedule( const UserProc *pUserProc, bool isCall )
    244     {
    245         Schedule schedule( pUserProc, size );
    246         if( isCall == false )
    247         {
    248             schedule.SpecifyAddressOf();
    249         }
    250         schedules.push_back( schedule );
    251 
    252         *((long *)(codeBuffer+size))=0;
    253         size += sizeof(long);
    254 
    255 
    256 
    257         // 未完成
    258         if( isCall )
    259         {
    260             pobj_SubAddrSchedule->add(pUserProc,1);
    261         }
    262         else
    263         {
    264             pobj_SubAddrSchedule->add(pUserProc,0);
    265         }
    266         extern char *OpBuffer;
    267         extern int obp;
    268         *((long *)(OpBuffer+obp))=0;
    269         ObpPlus( sizeof(long) );
    270     }
     243    void PutUserProcSchedule( const UserProc *pUserProc, bool isCall );
    271244    void Put( short s )
    272245    {
  • trunk/abdev/BasicCompiler_Common/src/CommonCodeGenerator.cpp

    r241 r245  
    5353            }
    5454
    55             pertialSchedules.erase( it );
     55            it = pertialSchedules.erase( it );
    5656            delete pPertialSchedule;
    5757
     
    6969    }
    7070}
    71 CodeGenerator::PertialSchedule *CodeGenerator::__jmp_op_format( char opcode, long offset, int op_size, bool isPertialSchedule, bool isSelfOpcodeOffset )
     71const CodeGenerator::PertialSchedule *CodeGenerator::__jmp_op_format( char opcode, long offset, int op_size, bool isPertialSchedule, bool isSelfOpcodeOffset )
    7272{
    7373    long beginCodePos = pNativeCode->GetSize();
     
    111111    }
    112112
    113     PertialSchedule *pPertialSchedule = NULL;
     113    const PertialSchedule *pPertialSchedule = NULL;
    114114    if( isPertialSchedule )
    115115    {
     
    143143    return pPertialSchedule;
    144144}
    145 CodeGenerator::PertialSchedule *CodeGenerator::op_jle( long offset, int op_size, bool isPertialSchedule )
     145const CodeGenerator::PertialSchedule *CodeGenerator::op_jle( long offset, int op_size, bool isPertialSchedule )
    146146{
    147147    return __jmp_op_format( (char)0x0E, offset, op_size, isPertialSchedule );
    148148}
    149 CodeGenerator::PertialSchedule *CodeGenerator::op_jbe( long offset, int op_size, bool isPertialSchedule )
     149const CodeGenerator::PertialSchedule *CodeGenerator::op_jbe( long offset, int op_size, bool isPertialSchedule )
    150150{
    151151    return __jmp_op_format( (char)0x06, offset, op_size, isPertialSchedule );
    152152}
    153 CodeGenerator::PertialSchedule *CodeGenerator::op_jge( long offset, int op_size, bool isPertialSchedule )
     153const CodeGenerator::PertialSchedule *CodeGenerator::op_jge( long offset, int op_size, bool isPertialSchedule )
    154154{
    155155    return __jmp_op_format( (char)0x0D, offset, op_size, isPertialSchedule );
    156156}
    157 CodeGenerator::PertialSchedule *CodeGenerator::op_jae( long offset, int op_size, bool isPertialSchedule )
     157const CodeGenerator::PertialSchedule *CodeGenerator::op_jae( long offset, int op_size, bool isPertialSchedule )
    158158{
    159159    return __jmp_op_format( (char)0x03, offset, op_size, isPertialSchedule );
    160160}
    161 CodeGenerator::PertialSchedule *CodeGenerator::op_jl( long offset, int op_size, bool isPertialSchedule )
     161const CodeGenerator::PertialSchedule *CodeGenerator::op_jl( long offset, int op_size, bool isPertialSchedule )
    162162{
    163163    return __jmp_op_format( (char)0x0C, offset, op_size, isPertialSchedule );
    164164}
    165 CodeGenerator::PertialSchedule *CodeGenerator::op_jb( long offset, int op_size, bool isPertialSchedule )
     165const CodeGenerator::PertialSchedule *CodeGenerator::op_jb( long offset, int op_size, bool isPertialSchedule )
    166166{
    167167    return __jmp_op_format( (char)0x02, offset, op_size, isPertialSchedule );
    168168}
    169 CodeGenerator::PertialSchedule *CodeGenerator::op_jg( long offset, int op_size, bool isPertialSchedule )
     169const CodeGenerator::PertialSchedule *CodeGenerator::op_jg( long offset, int op_size, bool isPertialSchedule )
    170170{
    171171    return __jmp_op_format( (char)0x0F, offset, op_size, isPertialSchedule );
    172172}
    173 CodeGenerator::PertialSchedule *CodeGenerator::op_ja( long offset, int op_size, bool isPertialSchedule )
     173const CodeGenerator::PertialSchedule *CodeGenerator::op_ja( long offset, int op_size, bool isPertialSchedule )
    174174{
    175175    return __jmp_op_format( (char)0x07, offset, op_size, isPertialSchedule );
    176176}
    177 CodeGenerator::PertialSchedule *CodeGenerator::op_jne( long offset, int op_size, bool isPertialSchedule )
     177const CodeGenerator::PertialSchedule *CodeGenerator::op_jne( long offset, int op_size, bool isPertialSchedule )
    178178{
    179179    return __jmp_op_format( (char)0x05, offset, op_size, isPertialSchedule );
    180180}
    181 CodeGenerator::PertialSchedule *CodeGenerator::op_je( long offset, int op_size, bool isPertialSchedule )
     181const CodeGenerator::PertialSchedule *CodeGenerator::op_je( long offset, int op_size, bool isPertialSchedule )
    182182{
    183183    return __jmp_op_format( (char)0x04, offset, op_size, isPertialSchedule );
    184184}
    185 CodeGenerator::PertialSchedule *CodeGenerator::op_jmp( long offset, int op_size, bool isPertialSchedule, bool isSelfOpcodeOffset )
     185const CodeGenerator::PertialSchedule *CodeGenerator::op_jmp( long offset, int op_size, bool isPertialSchedule, bool isSelfOpcodeOffset )
    186186{
    187187    return __jmp_op_format( (char)0xEB, offset, op_size, isPertialSchedule, isSelfOpcodeOffset );
  • trunk/abdev/BasicCompiler_Common/src/NativeCode.cpp

    r237 r245  
    11#include "stdafx.h"
     2
     3#include <NativeCode.h>
     4#include <Procedure.h>
    25
    36#define BREAK_EIP(checkEip)  (obp+0x00401000>=checkEip)
     
    1417    }
    1518}
     19
     20void NativeCode::PutUserProcSchedule( const UserProc *pUserProc, bool isCall )
     21{
     22    pUserProc->Using();
     23
     24    Schedule schedule( pUserProc, size );
     25    if( isCall == false )
     26    {
     27        schedule.SpecifyAddressOf();
     28    }
     29    schedules.push_back( schedule );
     30
     31    *((long *)(codeBuffer+size))=0;
     32    size += sizeof(long);
     33
     34
     35
     36    // 未完成
     37    if( isCall )
     38    {
     39        pobj_SubAddrSchedule->add(pUserProc,1);
     40    }
     41    else
     42    {
     43        pobj_SubAddrSchedule->add(pUserProc,0);
     44    }
     45    extern char *OpBuffer;
     46    extern int obp;
     47    *((long *)(OpBuffer+obp))=0;
     48    ObpPlus( sizeof(long) );
     49}
Note: See TracChangeset for help on using the changeset viewer.