## backend-intel32-g.pkg
# Compiled by:
#
src/lib/compiler/mythryl-compiler-support-for-intel32.lib# execode (absolute binary machine code) generation for intel32 architecture.
#
# The Linux ( / *bsd /...) and Win32 backends reference us in
#
#
src/lib/compiler/toplevel/compiler/mythryl-compiler-for-intel32-posix.pkg#
src/lib/compiler/toplevel/compiler/mythryl-compiler-for-intel32-win32.pkg#
# respectively.
#
# Our generic parameters serve to encapsulate the
# differences between the Linux / *bsd / ... an the Win32
# fn-call conventions and related platform-specific issues.
#
# "backend_tophalf_g" does the "high-level" (machine-independent)
# code optimizations and transformations.
#
# "backend_lowhalf_intel32_g" does the "low-level" (machine-dependent)
# code optimizations and transformations.
# Our sole entrypoint
#
# translate_anormcode_to_execode
#
# gets runtime-invoked from
#
#
src/lib/compiler/toplevel/main/translate-raw-syntax-to-execode-g.pkg#
#
stipulate
package csb = code_segment_buffer; # code_segment_buffer is from
src/lib/compiler/execution/code-segments/code-segment-buffer.pkg package pp = standard_prettyprinter; # standard_prettyprinter is from
src/lib/prettyprint/big/src/standard-prettyprinter.pkg package cv = compiler_verbosity; # compiler_verbosity is from
src/lib/compiler/front/basics/main/compiler-verbosity.pkg #
Npp = pp::Npp;
herein
# This generic is compiletime-invoked from:
#
#
src/lib/compiler/toplevel/compiler/mythryl-compiler-for-intel32-posix.pkg #
src/lib/compiler/toplevel/compiler/mythryl-compiler-for-intel32-win32.pkg #
generic package backend_intel32_g (
# =================
#
package cp: api { frame_alignment: Int;
return_small_structs_in_registers: Bool; # OSX (i.e., Darwin) returns structs <= 8 bytes in eax/edx. FALSE on other platforms.
};
abi_variant: Null_Or( String );
)
# Added for clarity, then removed because it is not defined here: -- 2011-06-01 CrT
# : (weak) Backend # Backend is from
src/lib/compiler/toplevel/main/backend.api =
backend_tophalf_g ( # backend_tophalf_g is from
src/lib/compiler/back/top/main/backend-tophalf-g.pkg #
package blh # "blh" == "backend_lowhalf".
=
backend_lowhalf_intel32_g ( # backend_lowhalf_intel32_g is from
src/lib/compiler/back/low/main/intel32/backend-lowhalf-intel32-g.pkg #
package cp = cp; # "cp" == "ccall_parameters".
#
my abi_variant # NULL everywhere except on intel mac, where it is (THE "Darwin").
= abi_variant;
);
fun harvest_code_segment (npp:Npp, cv: cv::Compiler_Verbosity) entrypoint_thunk
=
{ blh::squash_jumps_and_write_all_machine_code_and_data_bytes_into_code_segment_buffer (npp,cv);
#
csb::harvest_code_segment_buffer (entrypoint_thunk ());
};
);
end;
## Copyright (c) 2006 by The Fellowship of SML/NJ
## Subsequent changes by Jeff Prothero Copyright (c) 2010-2015,
## released per terms of SMLNJ-COPYRIGHT.