#![allow(dead_code)]
use edlc_core::prelude::mir_type::MirTypeId;
use edlc_core::prelude::{MirError, MirPhase};
use cranelift_codegen::gimli::{Register, X86_64};
use cranelift_codegen::ir::{Signature, StackSlot, Value};
use crate::compiler::RuntimeId;
use crate::codegen::FunctionTranslator;
use crate::prelude::external_func::JITExternCall;
use crate::prelude::JIT;
trait PointerType {
const BYTES: usize;
}
struct Bit32;
struct Bit64;
impl PointerType for Bit32 {
const BYTES: usize = 4;
}
impl PointerType for Bit64 {
const BYTES: usize = 8;
}
pub trait Architecture {
fn pointer_size() -> usize;
}
impl Architecture for X86_64 {
fn pointer_size() -> usize {
8
}
}
pub enum Excess {
StackStill
}
pub trait CallingConvention<A: Architecture> {
const REG_SIZE: usize;
const INT_REGS: &'static [Register];
const FLOAT_REGS: &'static [Register];
const EXCESS: Excess;
const STATIC_CHAIN_POINTER: Register;
const RETURN_REG: &'static [Register];
fn compile_call<Runtime>(
&self,
backend: &mut FunctionTranslator<'_, Runtime>,
phase: &mut MirPhase,
call: &JITExternCall,
) -> Result<(), MirError<JIT<Runtime>>>;
}
pub struct CallSignature {
args: Vec<MirTypeId>,
ret: MirTypeId,
runtime: Option<RuntimeId>,
}
pub struct CallInfo {
sig: Signature,
ret_slot: Option<StackSlot>,
args: Vec<Value>,
}