begin merging target assembler multimethod code

This commit is contained in:
Joshua Warner
2013-02-24 22:38:58 -07:00
parent 82eec28856
commit 4d38873096
10 changed files with 80 additions and 65 deletions

View File

@ -15,20 +15,17 @@
#include <avian/vm/codegen/lir.h>
#include "context.h"
#include "multimethod.h"
#include "operations.h"
#include "multimethod.h"
#include "../multimethod.h"
namespace avian {
namespace codegen {
namespace x86 {
using namespace util;
unsigned index(ArchitectureContext*, lir::UnaryOperation operation, lir::OperandType operand) {
return operation + (lir::UnaryOperationCount * operand);
}
unsigned index(ArchitectureContext*, lir::BinaryOperation operation,
lir::OperandType operand1,
lir::OperandType operand2)
@ -74,25 +71,25 @@ void populateTables(ArchitectureContext* c) {
zo[lir::StoreLoadBarrier] = storeLoadBarrier;
zo[lir::Trap] = trap;
uo[index(c, lir::Call, C)] = CAST1(callC);
uo[index(c, lir::Call, R)] = CAST1(callR);
uo[index(c, lir::Call, M)] = CAST1(callM);
uo[Multimethod::index(lir::Call, C)] = CAST1(callC);
uo[Multimethod::index(lir::Call, R)] = CAST1(callR);
uo[Multimethod::index(lir::Call, M)] = CAST1(callM);
uo[index(c, lir::AlignedCall, C)] = CAST1(alignedCallC);
uo[Multimethod::index(lir::AlignedCall, C)] = CAST1(alignedCallC);
uo[index(c, lir::LongCall, C)] = CAST1(longCallC);
uo[Multimethod::index(lir::LongCall, C)] = CAST1(longCallC);
uo[index(c, lir::AlignedLongCall, C)] = CAST1(alignedLongCallC);
uo[Multimethod::index(lir::AlignedLongCall, C)] = CAST1(alignedLongCallC);
uo[index(c, lir::Jump, R)] = CAST1(jumpR);
uo[index(c, lir::Jump, C)] = CAST1(jumpC);
uo[index(c, lir::Jump, M)] = CAST1(jumpM);
uo[Multimethod::index(lir::Jump, R)] = CAST1(jumpR);
uo[Multimethod::index(lir::Jump, C)] = CAST1(jumpC);
uo[Multimethod::index(lir::Jump, M)] = CAST1(jumpM);
uo[index(c, lir::AlignedJump, C)] = CAST1(alignedJumpC);
uo[Multimethod::index(lir::AlignedJump, C)] = CAST1(alignedJumpC);
uo[index(c, lir::LongJump, C)] = CAST1(longJumpC);
uo[Multimethod::index(lir::LongJump, C)] = CAST1(longJumpC);
uo[index(c, lir::AlignedLongJump, C)] = CAST1(alignedLongJumpC);
uo[Multimethod::index(lir::AlignedLongJump, C)] = CAST1(alignedLongJumpC);
bo[index(c, lir::Negate, R, R)] = CAST2(negateRR);