rustc: MIPS32 support

This commit is contained in:
Jyun-Yan You 2013-01-29 22:28:08 +08:00 committed by Brian Anderson
parent 0ecd9e03ff
commit 5150b9811b
18 changed files with 164 additions and 11 deletions

View File

@ -244,7 +244,7 @@ DRIVER_CRATE := $(S)src/driver/driver.rs
###################################################################### ######################################################################
# FIXME: x86-ism # FIXME: x86-ism
LLVM_COMPONENTS=x86 arm ipo bitreader bitwriter linker asmparser jit mcjit \ LLVM_COMPONENTS=x86 arm mips ipo bitreader bitwriter linker asmparser jit mcjit \
interpreter interpreter
define DEF_LLVM_VARS define DEF_LLVM_VARS

View File

@ -41,8 +41,14 @@ struct Registers {
data: [u32 * 16] data: [u32 * 16]
} }
#[cfg(target_arch="mips")]
struct Registers {
data: [u32 * 32]
}
#[cfg(target_arch="x86")] #[cfg(target_arch="x86")]
#[cfg(target_arch="arm")] #[cfg(target_arch="arm")]
#[cfg(target_arch="mips")]
struct Context { struct Context {
regs: Registers, regs: Registers,
next: *Context, next: *Context,
@ -69,6 +75,7 @@ struct BoxedRegion {
#[cfg(target_arch="x86")] #[cfg(target_arch="x86")]
#[cfg(target_arch="arm")] #[cfg(target_arch="arm")]
#[cfg(target_arch="mips")]
struct Task { struct Task {
// Public fields // Public fields
refcount: intptr_t, // 0 refcount: intptr_t, // 0

View File

@ -203,6 +203,7 @@ pub mod types {
#[cfg(target_arch = "x86")] #[cfg(target_arch = "x86")]
#[cfg(target_arch = "arm")] #[cfg(target_arch = "arm")]
#[cfg(target_arch = "mips")]
pub mod arch { pub mod arch {
pub mod c95 { pub mod c95 {
pub type c_char = i8; pub type c_char = i8;

View File

@ -28,6 +28,7 @@ pub mod inst {
#[cfg(target_arch = "x86")] #[cfg(target_arch = "x86")]
#[cfg(target_arch = "arm")] #[cfg(target_arch = "arm")]
#[cfg(target_arch = "mips")]
pub const bits: uint = 32; pub const bits: uint = 32;
#[cfg(target_arch = "x86_64")] #[cfg(target_arch = "x86_64")]

View File

@ -1097,6 +1097,9 @@ pub mod consts {
#[cfg(target_arch = "arm")] #[cfg(target_arch = "arm")]
pub use os::consts::arm::*; pub use os::consts::arm::*;
#[cfg(target_arch = "mips")]
use os::consts::mips::*;
pub mod x86 { pub mod x86 {
pub const ARCH: &str = "x86"; pub const ARCH: &str = "x86";
} }
@ -1106,6 +1109,9 @@ pub mod consts {
pub mod arm { pub mod arm {
pub const ARCH: &str = "arm"; pub const ARCH: &str = "arm";
} }
pub mod mips {
pub const ARCH: &str = "mips";
}
} }
#[cfg(test)] #[cfg(test)]

View File

@ -91,6 +91,7 @@ pub pure fn Path(s: &str) -> Path {
mod stat { mod stat {
#[cfg(target_arch = "x86")] #[cfg(target_arch = "x86")]
#[cfg(target_arch = "arm")] #[cfg(target_arch = "arm")]
#[cfg(target_arch = "mips")]
pub mod arch { pub mod arch {
use libc; use libc;

View File

@ -166,6 +166,7 @@ pub mod tests {
#[test] #[test]
#[cfg(target_arch = "x86")] #[cfg(target_arch = "x86")]
#[cfg(target_arch = "arm")] #[cfg(target_arch = "arm")]
#[cfg(target_arch = "mips")]
pub fn size_of_32() { pub fn size_of_32() {
assert size_of::<uint>() == 4u; assert size_of::<uint>() == 4u;
assert size_of::<*uint>() == 4u; assert size_of::<*uint>() == 4u;
@ -196,6 +197,7 @@ pub mod tests {
#[test] #[test]
#[cfg(target_arch = "x86")] #[cfg(target_arch = "x86")]
#[cfg(target_arch = "arm")] #[cfg(target_arch = "arm")]
#[cfg(target_arch = "mips")]
pub fn align_of_32() { pub fn align_of_32() {
assert pref_align_of::<uint>() == 4u; assert pref_align_of::<uint>() == 4u;
assert pref_align_of::<*uint>() == 4u; assert pref_align_of::<*uint>() == 4u;

85
src/librustc/back/mips.rs Normal file
View File

@ -0,0 +1,85 @@
// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
use back::target_strs;
use driver::session;
use session::sess_os_to_meta_os;
use metadata::loader::meta_section_name;
pub fn get_target_strs(target_os: session::os) -> target_strs::t {
return target_strs::t {
module_asm: ~"",
meta_sect_name: meta_section_name(sess_os_to_meta_os(target_os)),
data_layout: match target_os {
session::os_macos => {
~"e-p:32:32:32" +
~"-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64" +
~"-f32:32:32-f64:64:64" +
~"-v64:64:64-v128:64:128" +
~"-a0:0:64-n32"
}
session::os_win32 => {
~"e-p:32:32:32" +
~"-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64" +
~"-f32:32:32-f64:64:64" +
~"-v64:64:64-v128:64:128" +
~"-a0:0:64-n32"
}
session::os_linux => {
~"e-p:32:32:32" +
~"-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64" +
~"-f32:32:32-f64:64:64" +
~"-v64:64:64-v128:64:128" +
~"-a0:0:64-n32"
}
session::os_android => {
~"e-p:32:32:32" +
~"-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64" +
~"-f32:32:32-f64:64:64" +
~"-v64:64:64-v128:64:128" +
~"-a0:0:64-n32"
}
session::os_freebsd => {
~"e-p:32:32:32" +
~"-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64" +
~"-f32:32:32-f64:64:64" +
~"-v64:64:64-v128:64:128" +
~"-a0:0:64-n32"
}
},
target_triple: match target_os {
session::os_macos => ~"mips-apple-darwin",
session::os_win32 => ~"mips-pc-mingw32",
session::os_linux => ~"mips-unknown-linux-gnu",
session::os_android => ~"mips-unknown-android-gnu",
session::os_freebsd => ~"mips-unknown-freebsd"
},
cc_args: ~[]
};
}
//
// Local Variables:
// mode: rust
// fill-column: 78;
// indent-tabs-mode: nil
// c-basic-offset: 4
// buffer-file-coding-system: utf-8-unix
// End:
//

View File

@ -11,7 +11,7 @@
use core::prelude::*; use core::prelude::*;
use back::link; use back::link;
use back::{arm, x86, x86_64}; use back::{arm, x86, x86_64, mips};
use driver::session::{Aggressive}; use driver::session::{Aggressive};
use driver::session::{Session, Session_, OptLevel, No, Less, Default}; use driver::session::{Session, Session_, OptLevel, No, Less, Default};
use driver::session; use driver::session;
@ -94,7 +94,8 @@ pub fn default_configuration(sess: Session, +argv0: ~str, input: input) ->
let (end,arch,wordsz) = match sess.targ_cfg.arch { let (end,arch,wordsz) = match sess.targ_cfg.arch {
session::arch_x86 => (~"little",~"x86",~"32"), session::arch_x86 => (~"little",~"x86",~"32"),
session::arch_x86_64 => (~"little",~"x86_64",~"64"), session::arch_x86_64 => (~"little",~"x86_64",~"64"),
session::arch_arm => (~"little",~"arm",~"32") session::arch_arm => (~"little",~"arm",~"32"),
session::arch_mips => (~"little",~"arm",~"32")
}; };
return ~[ // Target bindings. return ~[ // Target bindings.
@ -472,6 +473,8 @@ pub fn get_arch(triple: ~str) -> Option<session::arch> {
} else if str::contains(triple, ~"arm") || } else if str::contains(triple, ~"arm") ||
str::contains(triple, ~"xscale") { str::contains(triple, ~"xscale") {
Some(session::arch_arm) Some(session::arch_arm)
} else if str::contains(triple, ~"mips") {
Some(session::arch_mips)
} else { None } } else { None }
} }
@ -490,12 +493,14 @@ pub fn build_target_config(sopts: @session::options,
let (int_type, uint_type, float_type) = match arch { let (int_type, uint_type, float_type) = match arch {
session::arch_x86 => (ast::ty_i32, ast::ty_u32, ast::ty_f64), session::arch_x86 => (ast::ty_i32, ast::ty_u32, ast::ty_f64),
session::arch_x86_64 => (ast::ty_i64, ast::ty_u64, ast::ty_f64), session::arch_x86_64 => (ast::ty_i64, ast::ty_u64, ast::ty_f64),
session::arch_arm => (ast::ty_i32, ast::ty_u32, ast::ty_f64) session::arch_arm => (ast::ty_i32, ast::ty_u32, ast::ty_f64),
session::arch_mips => (ast::ty_i32, ast::ty_u32, ast::ty_f64)
}; };
let target_strs = match arch { let target_strs = match arch {
session::arch_x86 => x86::get_target_strs(os), session::arch_x86 => x86::get_target_strs(os),
session::arch_x86_64 => x86_64::get_target_strs(os), session::arch_x86_64 => x86_64::get_target_strs(os),
session::arch_arm => arm::get_target_strs(os) session::arch_arm => arm::get_target_strs(os),
session::arch_mips => mips::get_target_strs(os)
}; };
let target_cfg = @session::config { let target_cfg = @session::config {
os: os, os: os,

View File

@ -33,7 +33,7 @@ use syntax;
pub enum os { os_win32, os_macos, os_linux, os_android, os_freebsd, } pub enum os { os_win32, os_macos, os_linux, os_android, os_freebsd, }
#[deriving_eq] #[deriving_eq]
pub enum arch { arch_x86, arch_x86_64, arch_arm, } pub enum arch { arch_x86, arch_x86_64, arch_arm, arch_mips, }
pub enum crate_type { bin_crate, lib_crate, unknown_crate, } pub enum crate_type { bin_crate, lib_crate, unknown_crate, }

View File

@ -1484,7 +1484,9 @@ pub fn call_memcpy(cx: block, dst: ValueRef, src: ValueRef,
let _icx = cx.insn_ctxt("call_memcpy"); let _icx = cx.insn_ctxt("call_memcpy");
let ccx = cx.ccx(); let ccx = cx.ccx();
let key = match ccx.sess.targ_cfg.arch { let key = match ccx.sess.targ_cfg.arch {
session::arch_x86 | session::arch_arm => ~"llvm.memcpy.p0i8.p0i8.i32", session::arch_x86
| session::arch_arm
| session::arch_mips => ~"llvm.memcpy.p0i8.p0i8.i32",
session::arch_x86_64 => ~"llvm.memcpy.p0i8.p0i8.i64" session::arch_x86_64 => ~"llvm.memcpy.p0i8.p0i8.i64"
}; };
let memcpy = ccx.intrinsics.get(&key); let memcpy = ccx.intrinsics.get(&key);
@ -1526,7 +1528,9 @@ pub fn memzero(cx: block, llptr: ValueRef, llty: TypeRef) {
let intrinsic_key; let intrinsic_key;
match ccx.sess.targ_cfg.arch { match ccx.sess.targ_cfg.arch {
session::arch_x86 | session::arch_arm => { session::arch_x86
| session::arch_arm
| session::arch_mips => {
intrinsic_key = ~"llvm.memset.p0i8.i32"; intrinsic_key = ~"llvm.memset.p0i8.i32";
} }
session::arch_x86_64 => { session::arch_x86_64 => {

View File

@ -766,7 +766,8 @@ pub fn T_int(targ_cfg: @session::config) -> TypeRef {
return match targ_cfg.arch { return match targ_cfg.arch {
session::arch_x86 => T_i32(), session::arch_x86 => T_i32(),
session::arch_x86_64 => T_i64(), session::arch_x86_64 => T_i64(),
session::arch_arm => T_i32() session::arch_arm => T_i32(),
session::arch_mips => T_i32()
}; };
} }
@ -803,7 +804,8 @@ pub fn T_float(targ_cfg: @session::config) -> TypeRef {
return match targ_cfg.arch { return match targ_cfg.arch {
session::arch_x86 => T_f64(), session::arch_x86 => T_f64(),
session::arch_x86_64 => T_f64(), session::arch_x86_64 => T_f64(),
session::arch_arm => T_f64() session::arch_arm => T_f64(),
session::arch_mips => T_f64()
}; };
} }

View File

@ -113,6 +113,7 @@ pub mod back {
pub mod abi; pub mod abi;
pub mod upcall; pub mod upcall;
pub mod arm; pub mod arm;
pub mod mips;
pub mod x86; pub mod x86;
pub mod x86_64; pub mod x86_64;
pub mod rpath; pub mod rpath;

View File

@ -27,6 +27,7 @@ A BigDigit is half the size of machine word size.
*/ */
#[cfg(target_arch = "x86")] #[cfg(target_arch = "x86")]
#[cfg(target_arch = "arm")] #[cfg(target_arch = "arm")]
#[cfg(target_arch = "mips")]
pub type BigDigit = u16; pub type BigDigit = u16;
/** /**
@ -42,6 +43,7 @@ pub mod BigDigit {
#[cfg(target_arch = "x86")] #[cfg(target_arch = "x86")]
#[cfg(target_arch = "arm")] #[cfg(target_arch = "arm")]
#[cfg(target_arch = "mips")]
pub const bits: uint = 16; pub const bits: uint = 16;
#[cfg(target_arch = "x86_64")] #[cfg(target_arch = "x86_64")]
@ -530,6 +532,7 @@ priv pure fn get_radix_base(radix: uint) -> (uint, uint) {
#[cfg(target_arch = "arm")] #[cfg(target_arch = "arm")]
#[cfg(target_arch = "x86")] #[cfg(target_arch = "x86")]
#[cfg(target_arch = "mips")]
priv pure fn get_radix_base(radix: uint) -> (uint, uint) { priv pure fn get_radix_base(radix: uint) -> (uint, uint) {
assert 1 < radix && radix <= 16; assert 1 < radix && radix <= 16;
match radix { match radix {
@ -946,6 +949,7 @@ mod biguint_tests {
#[cfg(target_arch = "arm")] #[cfg(target_arch = "arm")]
#[cfg(target_arch = "x86")] #[cfg(target_arch = "x86")]
#[cfg(target_arch = "mips")]
fn test_shl_bits() { fn test_shl_bits() {
check(~[0x3210, 0x7654, 0xba98, 0xfedc, check(~[0x3210, 0x7654, 0xba98, 0xfedc,
0x3210, 0x7654, 0xba98, 0xfedc], 4, 0x3210, 0x7654, 0xba98, 0xfedc], 4,
@ -962,6 +966,7 @@ mod biguint_tests {
#[test] #[test]
#[ignore(cfg(target_arch = "x86"))] #[ignore(cfg(target_arch = "x86"))]
#[ignore(cfg(target_arch = "arm"))] #[ignore(cfg(target_arch = "arm"))]
#[ignore(cfg(target_arch = "mips"))]
fn test_shr() { fn test_shr() {
fn check(v: ~[BigDigit], shift: uint, ans: ~[BigDigit]) { fn check(v: ~[BigDigit], shift: uint, ans: ~[BigDigit]) {
assert BigUint::new(v) >> shift == BigUint::new(ans); assert BigUint::new(v) >> shift == BigUint::new(ans);
@ -989,6 +994,7 @@ mod biguint_tests {
#[cfg(target_arch = "arm")] #[cfg(target_arch = "arm")]
#[cfg(target_arch = "x86")] #[cfg(target_arch = "x86")]
#[cfg(target_arch = "mips")]
fn test_shr_bits() { fn test_shr_bits() {
check(~[0x2100, 0x6543, 0xa987, 0xedcb, check(~[0x2100, 0x6543, 0xa987, 0xedcb,
0x210f, 0x6543, 0xa987, 0xedcb, 0xf], 4, 0x210f, 0x6543, 0xa987, 0xedcb, 0xf], 4,

View File

@ -1504,6 +1504,7 @@ pub mod test {
} }
#[cfg(target_arch="x86")] #[cfg(target_arch="x86")]
#[cfg(target_arch="arm")] #[cfg(target_arch="arm")]
#[cfg(target_arch="mips")]
pub mod impl32 { pub mod impl32 {
use net::tcp::test::*; use net::tcp::test::*;

View File

@ -132,6 +132,7 @@ pub struct uv_tcp_t_32bit_unix_riders {
} }
#[cfg(target_arch="x86")] #[cfg(target_arch="x86")]
#[cfg(target_arch="arm")] #[cfg(target_arch="arm")]
#[cfg(target_arch="mips")]
pub struct uv_tcp_t_32bit_unix_riders { pub struct uv_tcp_t_32bit_unix_riders {
a29: *u8, a30: *u8, a31: *u8, a29: *u8, a30: *u8, a31: *u8,
} }
@ -187,6 +188,7 @@ pub struct uv_write_t_32bit_unix_riders {
} }
#[cfg(target_arch="x86")] #[cfg(target_arch="x86")]
#[cfg(target_arch="arm")] #[cfg(target_arch="arm")]
#[cfg(target_arch="mips")]
pub struct uv_write_t_32bit_unix_riders { pub struct uv_write_t_32bit_unix_riders {
a13: *u8, a14: *u8, a15: *u8, a13: *u8, a14: *u8, a15: *u8,
a16: *u8, a16: *u8,
@ -215,6 +217,7 @@ pub struct uv_async_t_32bit_unix_riders {
} }
#[cfg(target_arch="x86")] #[cfg(target_arch="x86")]
#[cfg(target_arch="arm")] #[cfg(target_arch="arm")]
#[cfg(target_arch="mips")]
pub struct uv_async_t_32bit_unix_riders { pub struct uv_async_t_32bit_unix_riders {
a10: *u8, a10: *u8,
} }
@ -244,6 +247,7 @@ pub struct uv_timer_t_32bit_unix_riders {
} }
#[cfg(target_arch="x86")] #[cfg(target_arch="x86")]
#[cfg(target_arch="arm")] #[cfg(target_arch="arm")]
#[cfg(target_arch="mips")]
pub struct uv_timer_t_32bit_unix_riders { pub struct uv_timer_t_32bit_unix_riders {
a10: *u8, a11: *u8, a12: *u8 a10: *u8, a11: *u8, a12: *u8
} }
@ -273,6 +277,7 @@ pub struct sockaddr_in6 {
} }
#[cfg(target_arch="x86")] #[cfg(target_arch="x86")]
#[cfg(target_arch="arm")] #[cfg(target_arch="arm")]
#[cfg(target_arch="mips")]
pub struct sockaddr_in6 { pub struct sockaddr_in6 {
a0: *u8, a1: *u8, a0: *u8, a1: *u8,
a2: *u8, a3: *u8, a2: *u8, a3: *u8,
@ -291,7 +296,8 @@ pub mod addr_in_impl {
a2: *u8, a3: *u8, a2: *u8, a3: *u8,
} }
#[cfg(target_arch="x86")] #[cfg(target_arch="x86")]
#[cfg(target_arch="arm")] #[cfg(target_arch="arm")]
#[cfg(target_arch="mips")]
pub struct addr_in { pub struct addr_in {
a0: *u8, a1: *u8, a0: *u8, a1: *u8,
a2: *u8, a3: *u8, a2: *u8, a3: *u8,
@ -319,6 +325,7 @@ pub mod addrinfo_impl {
} }
#[cfg(target_arch="x86")] #[cfg(target_arch="x86")]
#[cfg(target_arch="arm")] #[cfg(target_arch="arm")]
#[cfg(target_arch="mips")]
pub struct addrinfo { pub struct addrinfo {
a00: *u8, a01: *u8, a02: *u8, a03: *u8, a00: *u8, a01: *u8, a02: *u8, a03: *u8,
a04: *u8, a05: *u8, a06: *u8, a07: *u8, a04: *u8, a05: *u8, a06: *u8, a07: *u8,
@ -402,6 +409,7 @@ pub mod uv_ll_struct_stubgen {
} }
#[cfg(target_arch="x86")] #[cfg(target_arch="x86")]
#[cfg(target_arch="arm")] #[cfg(target_arch="arm")]
#[cfg(target_arch="mips")]
pub fn gen_stub_arch() -> uv_tcp_t { pub fn gen_stub_arch() -> uv_tcp_t {
uv_tcp_t { uv_tcp_t {
fields: uv_handle_fields { fields: uv_handle_fields {
@ -546,6 +554,7 @@ pub mod uv_ll_struct_stubgen {
} }
#[cfg(target_arch = "x86")] #[cfg(target_arch = "x86")]
#[cfg(target_arch="arm")] #[cfg(target_arch="arm")]
#[cfg(target_arch="mips")]
pub fn gen_stub_arch() -> uv_async_t { pub fn gen_stub_arch() -> uv_async_t {
uv_async_t { uv_async_t {
fields: uv_handle_fields { fields: uv_handle_fields {
@ -602,6 +611,7 @@ pub mod uv_ll_struct_stubgen {
} }
#[cfg(target_arch = "x86")] #[cfg(target_arch = "x86")]
#[cfg(target_arch="arm")] #[cfg(target_arch="arm")]
#[cfg(target_arch="mips")]
pub fn gen_stub_arch() -> uv_timer_t { pub fn gen_stub_arch() -> uv_timer_t {
uv_timer_t { uv_timer_t {
fields: uv_handle_fields { fields: uv_handle_fields {
@ -662,6 +672,7 @@ pub mod uv_ll_struct_stubgen {
} }
#[cfg(target_arch="x86")] #[cfg(target_arch="x86")]
#[cfg(target_arch="arm")] #[cfg(target_arch="arm")]
#[cfg(target_arch="mips")]
pub fn gen_stub_arch() -> uv_write_t { pub fn gen_stub_arch() -> uv_write_t {
uv_write_t { uv_write_t {
fields: uv_handle_fields { fields: uv_handle_fields {
@ -1748,6 +1759,7 @@ pub mod test {
} }
#[cfg(target_arch="x86")] #[cfg(target_arch="x86")]
#[cfg(target_arch="arm")] #[cfg(target_arch="arm")]
#[cfg(target_arch="mips")]
pub mod impl32 { pub mod impl32 {
use uv_ll::test::*; use uv_ll::test::*;
#[test] #[test]

View File

@ -97,6 +97,12 @@ void LLVMInitializeARMTarget();
void LLVMInitializeARMTargetMC(); void LLVMInitializeARMTargetMC();
void LLVMInitializeARMAsmPrinter(); void LLVMInitializeARMAsmPrinter();
void LLVMInitializeARMAsmParser(); void LLVMInitializeARMAsmParser();
void LLVMInitializeMipsTargetInfo();
void LLVMInitializeMipsTarget();
void LLVMInitializeMipsTargetMC();
void LLVMInitializeMipsAsmPrinter();
void LLVMInitializeMipsAsmParser();
// Only initialize the platforms supported by Rust here, // Only initialize the platforms supported by Rust here,
// because using --llvm-root will have multiple platforms // because using --llvm-root will have multiple platforms
// that rustllvm doesn't actually link to and it's pointless to put target info // that rustllvm doesn't actually link to and it's pointless to put target info
@ -114,6 +120,12 @@ void LLVMRustInitializeTargets() {
LLVMInitializeARMTargetMC(); LLVMInitializeARMTargetMC();
LLVMInitializeARMAsmPrinter(); LLVMInitializeARMAsmPrinter();
LLVMInitializeARMAsmParser(); LLVMInitializeARMAsmParser();
LLVMInitializeMipsTargetInfo();
LLVMInitializeMipsTarget();
LLVMInitializeMipsTargetMC();
LLVMInitializeMipsAsmPrinter();
LLVMInitializeMipsAsmParser();
} }
// Custom memory manager for MCJITting. It needs special features // Custom memory manager for MCJITting. It needs special features

View File

@ -384,18 +384,25 @@ LLVMInitializeScalarOpts
LLVMInitializeTarget LLVMInitializeTarget
LLVMInitializeTransformUtils LLVMInitializeTransformUtils
LLVMInitializeARMAsmLexer LLVMInitializeARMAsmLexer
LLVMInitializeMipsAsmLexer
LLVMInitializeX86AsmLexer LLVMInitializeX86AsmLexer
LLVMInitializeARMAsmParser LLVMInitializeARMAsmParser
LLVMInitializeMipsAsmParser
LLVMInitializeX86AsmParser LLVMInitializeX86AsmParser
LLVMInitializeARMAsmPrinter LLVMInitializeARMAsmPrinter
LLVMInitializeMipsAsmPrinter
LLVMInitializeX86AsmPrinter LLVMInitializeX86AsmPrinter
LLVMInitializeARMDisassembler LLVMInitializeARMDisassembler
LLVMInitializeMipsDisassembler
LLVMInitializeX86Disassembler LLVMInitializeX86Disassembler
LLVMInitializeARMTarget LLVMInitializeARMTarget
LLVMInitializeMipsTarget
LLVMInitializeX86Target LLVMInitializeX86Target
LLVMInitializeARMTargetMC LLVMInitializeARMTargetMC
LLVMInitializeMipsTargetMC
LLVMInitializeX86TargetMC LLVMInitializeX86TargetMC
LLVMInitializeARMTargetInfo LLVMInitializeARMTargetInfo
LLVMInitializeMipsTargetInfo
LLVMInitializeX86TargetInfo LLVMInitializeX86TargetInfo
LLVMInsertBasicBlock LLVMInsertBasicBlock
LLVMInsertBasicBlockInContext LLVMInsertBasicBlockInContext