Refactor SimpleJITTrapSink/FaerieTrapSink into NullTrapSink.
This publishes it for use outside of simpljie/faerie as well.
This commit is contained in:
@@ -27,7 +27,7 @@ cargo update
|
|||||||
|
|
||||||
echo git commit -a -m "\"Bump version to $version"\"
|
echo git commit -a -m "\"Bump version to $version"\"
|
||||||
echo git push
|
echo git push
|
||||||
for crate in entity codegen frontend native reader wasm umbrella ; do
|
for crate in entity codegen frontend native reader wasm module simplejit faerie umbrella ; do
|
||||||
if [ "$crate" == "umbrella" ]; then
|
if [ "$crate" == "umbrella" ]; then
|
||||||
dir="cretonne"
|
dir="cretonne"
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -123,3 +123,11 @@ impl<'a> CodeSink for MemoryCodeSink<'a> {
|
|||||||
self.traps.trap(ofs, srcloc, code);
|
self.traps.trap(ofs, srcloc, code);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// A `TrapSink` implementation that does nothing, which is convenient when
|
||||||
|
/// compiling code that does not rely on trapping semantics.
|
||||||
|
pub struct NullTrapSink {}
|
||||||
|
|
||||||
|
impl TrapSink for NullTrapSink {
|
||||||
|
fn trap(&mut self, _offset: CodeOffset, _srcloc: SourceLoc, _code: TrapCode) {}
|
||||||
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
mod memorysink;
|
mod memorysink;
|
||||||
mod relaxation;
|
mod relaxation;
|
||||||
|
|
||||||
pub use self::memorysink::{MemoryCodeSink, RelocSink, TrapSink};
|
pub use self::memorysink::{MemoryCodeSink, RelocSink, TrapSink, NullTrapSink};
|
||||||
pub use self::relaxation::relax_branches;
|
pub use self::relaxation::relax_branches;
|
||||||
pub use regalloc::RegDiversions;
|
pub use regalloc::RegDiversions;
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
//! Defines `FaerieBackend`.
|
//! Defines `FaerieBackend`.
|
||||||
|
|
||||||
use container;
|
use container;
|
||||||
use cretonne_codegen::binemit::{Addend, CodeOffset, Reloc, RelocSink, TrapSink};
|
use cretonne_codegen::binemit::{Addend, CodeOffset, Reloc, RelocSink, NullTrapSink};
|
||||||
use cretonne_codegen::isa::TargetIsa;
|
use cretonne_codegen::isa::TargetIsa;
|
||||||
use cretonne_codegen::result::CtonError;
|
use cretonne_codegen::result::CtonError;
|
||||||
use cretonne_codegen::{self, binemit, ir};
|
use cretonne_codegen::{self, binemit, ir};
|
||||||
@@ -103,7 +103,9 @@ impl Backend for FaerieBackend {
|
|||||||
name,
|
name,
|
||||||
namespace,
|
namespace,
|
||||||
};
|
};
|
||||||
let mut trap_sink = FaerieTrapSink {};
|
// Ignore traps for now. For now, frontends should just avoid generating code
|
||||||
|
// that traps.
|
||||||
|
let mut trap_sink = NullTrapSink {};
|
||||||
|
|
||||||
ctx.emit_to_memory(
|
ctx.emit_to_memory(
|
||||||
code.as_mut_ptr(),
|
code.as_mut_ptr(),
|
||||||
@@ -289,10 +291,3 @@ impl<'a> RelocSink for FaerieRelocSink<'a> {
|
|||||||
unimplemented!();
|
unimplemented!();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct FaerieTrapSink {}
|
|
||||||
|
|
||||||
impl TrapSink for FaerieTrapSink {
|
|
||||||
// Ignore traps for now. For now, frontends should just avoid generating code that traps.
|
|
||||||
fn trap(&mut self, _offset: CodeOffset, _srcloc: ir::SourceLoc, _code: ir::TrapCode) {}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
//! Defines `SimpleJITBackend`.
|
//! Defines `SimpleJITBackend`.
|
||||||
|
|
||||||
use cretonne_codegen::binemit::{Addend, CodeOffset, Reloc, RelocSink, TrapSink};
|
use cretonne_codegen::binemit::{Addend, CodeOffset, Reloc, RelocSink, NullTrapSink};
|
||||||
use cretonne_codegen::isa::TargetIsa;
|
use cretonne_codegen::isa::TargetIsa;
|
||||||
use cretonne_codegen::result::CtonError;
|
use cretonne_codegen::result::CtonError;
|
||||||
use cretonne_codegen::{self, ir, settings};
|
use cretonne_codegen::{self, ir, settings};
|
||||||
@@ -100,7 +100,9 @@ impl<'simple_jit_backend> Backend for SimpleJITBackend {
|
|||||||
"TODO: handle OOM etc.",
|
"TODO: handle OOM etc.",
|
||||||
);
|
);
|
||||||
let mut reloc_sink = SimpleJITRelocSink::new();
|
let mut reloc_sink = SimpleJITRelocSink::new();
|
||||||
let mut trap_sink = SimpleJITTrapSink {};
|
// Ignore traps for now. For now, frontends should just avoid generating code
|
||||||
|
// that traps.
|
||||||
|
let mut trap_sink = NullTrapSink {};
|
||||||
ctx.emit_to_memory(ptr, &mut reloc_sink, &mut trap_sink, &*self.isa);
|
ctx.emit_to_memory(ptr, &mut reloc_sink, &mut trap_sink, &*self.isa);
|
||||||
|
|
||||||
Ok(Self::CompiledFunction {
|
Ok(Self::CompiledFunction {
|
||||||
@@ -356,10 +358,3 @@ impl RelocSink for SimpleJITRelocSink {
|
|||||||
unimplemented!();
|
unimplemented!();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct SimpleJITTrapSink {}
|
|
||||||
|
|
||||||
impl TrapSink for SimpleJITTrapSink {
|
|
||||||
// Ignore traps for now. For now, frontends should just avoid generating code that traps.
|
|
||||||
fn trap(&mut self, _offset: CodeOffset, _srcloc: ir::SourceLoc, _code: ir::TrapCode) {}
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user