From 02031b185b4653e6c72e21f7a51238b903f6d638 Mon Sep 17 00:00:00 2001 From: buzbee Date: Fri, 23 Nov 2012 09:41:35 -0800 Subject: Quick compiler: Single .so for all targets With this CL, all targets can be built into a single .so (but we're not yet doing so - the compiler driver needs to be reworked). A new Codgen class is introduced (see compiler/codegen/codegen.h), along with target-specific sub-classes ArmCodegen, MipsCodegens and X86Codegen (see compiler/codegen/*/codegen_[Arm|Mips|X86].h). Additional minor code, comment and format refactoring. Some source files combined, temporary header files deleted and a few file renames to better identify their function. Next up is combining the Quick and Portable .so files. Note: building all targets into libdvm-compiler.so increases its size by 140K bytes. I'm inclined to not bother introducing conditional compilation to limit code to the specific target - the added build and testing complexity doesn't doesn't seem worth such a modest size savings. Change-Id: Id9c5b4502ad6b77cdb31f71d3126f51a4f2e9dfe --- src/compiler/codegen/arm/arm_lir.h | 579 ++-- src/compiler/codegen/arm/assemble_arm.cc | 10 +- src/compiler/codegen/arm/call_arm.cc | 77 +- src/compiler/codegen/arm/codegen_arm.h | 199 ++ src/compiler/codegen/arm/fp_arm.cc | 31 +- src/compiler/codegen/arm/int_arm.cc | 100 +- src/compiler/codegen/arm/target_arm.cc | 116 +- src/compiler/codegen/arm/utility_arm.cc | 130 +- src/compiler/codegen/codegen.h | 395 +++ src/compiler/codegen/codegen_util.cc | 89 +- src/compiler/codegen/codegen_util.h | 13 +- src/compiler/codegen/compiler_codegen.h | 137 - src/compiler/codegen/gen_common.cc | 426 +-- src/compiler/codegen/gen_common.h | 80 - src/compiler/codegen/gen_invoke.cc | 344 ++- src/compiler/codegen/gen_invoke.h | 41 - src/compiler/codegen/gen_loadstore.cc | 35 +- src/compiler/codegen/gen_loadstore.h | 35 - src/compiler/codegen/local_optimizations.cc | 38 +- src/compiler/codegen/method_bitcode.cc | 3512 ------------------------ src/compiler/codegen/method_bitcode.h | 27 - src/compiler/codegen/method_codegen_driver.cc | 859 ------ src/compiler/codegen/method_codegen_driver.h | 31 - src/compiler/codegen/mips/assemble_mips.cc | 12 +- src/compiler/codegen/mips/call_mips.cc | 25 +- src/compiler/codegen/mips/codegen_mips.h | 192 ++ src/compiler/codegen/mips/fp_mips.cc | 37 +- src/compiler/codegen/mips/int_mips.cc | 101 +- src/compiler/codegen/mips/mips_lir.h | 225 +- src/compiler/codegen/mips/target_mips.cc | 136 +- src/compiler/codegen/mips/utility_mips.cc | 168 +- src/compiler/codegen/mir_to_gbc.cc | 3544 +++++++++++++++++++++++++ src/compiler/codegen/mir_to_gbc.h | 27 + src/compiler/codegen/mir_to_lir.cc | 819 ++++++ src/compiler/codegen/mir_to_lir.h | 27 + src/compiler/codegen/ralloc_util.cc | 167 +- src/compiler/codegen/ralloc_util.h | 99 +- src/compiler/codegen/target_list.h | 131 - src/compiler/codegen/x86/assemble_x86.cc | 27 +- src/compiler/codegen/x86/call_x86.cc | 33 +- src/compiler/codegen/x86/codegen_x86.h | 189 ++ src/compiler/codegen/x86/fp_x86.cc | 27 +- src/compiler/codegen/x86/int_x86.cc | 93 +- src/compiler/codegen/x86/target_x86.cc | 122 +- src/compiler/codegen/x86/utility_x86.cc | 97 +- src/compiler/codegen/x86/x86_lir.h | 34 +- 46 files changed, 6924 insertions(+), 6712 deletions(-) create mode 100644 src/compiler/codegen/arm/codegen_arm.h create mode 100644 src/compiler/codegen/codegen.h delete mode 100644 src/compiler/codegen/compiler_codegen.h delete mode 100644 src/compiler/codegen/gen_common.h delete mode 100644 src/compiler/codegen/gen_invoke.h delete mode 100644 src/compiler/codegen/gen_loadstore.h delete mode 100644 src/compiler/codegen/method_bitcode.cc delete mode 100644 src/compiler/codegen/method_bitcode.h delete mode 100644 src/compiler/codegen/method_codegen_driver.cc delete mode 100644 src/compiler/codegen/method_codegen_driver.h create mode 100644 src/compiler/codegen/mips/codegen_mips.h create mode 100644 src/compiler/codegen/mir_to_gbc.cc create mode 100644 src/compiler/codegen/mir_to_gbc.h create mode 100644 src/compiler/codegen/mir_to_lir.cc create mode 100644 src/compiler/codegen/mir_to_lir.h delete mode 100644 src/compiler/codegen/target_list.h create mode 100644 src/compiler/codegen/x86/codegen_x86.h (limited to 'src/compiler/codegen') diff --git a/src/compiler/codegen/arm/arm_lir.h b/src/compiler/codegen/arm/arm_lir.h index 7955b1bd89..09b45b83f3 100644 --- a/src/compiler/codegen/arm/arm_lir.h +++ b/src/compiler/codegen/arm/arm_lir.h @@ -93,18 +93,19 @@ namespace art { * +========================+ */ -/* Offset to distingish FP regs */ +// Offset to distingish FP regs. #define ARM_FP_REG_OFFSET 32 -/* Offset to distinguish DP FP regs */ +// Offset to distinguish DP FP regs. #define ARM_FP_DOUBLE 64 -/* First FP callee save */ +// First FP callee save. #define ARM_FP_CALLEE_SAVE_BASE 16 -/* Reg types */ +// Reg types. #define ARM_REGTYPE(x) (x & (ARM_FP_REG_OFFSET | ARM_FP_DOUBLE)) #define ARM_FPREG(x) ((x & ARM_FP_REG_OFFSET) == ARM_FP_REG_OFFSET) #define ARM_LOWREG(x) ((x & 0x7) == x) #define ARM_DOUBLEREG(x) ((x & ARM_FP_DOUBLE) == ARM_FP_DOUBLE) #define ARM_SINGLEREG(x) (ARM_FPREG(x) && !ARM_DOUBLEREG(x)) + /* * Note: the low register of a floating point pair is sufficient to * create the name of a double, but require both names to be passed to @@ -113,10 +114,10 @@ namespace art { * code that reg locations always describe doubles as a pair of singles. */ #define ARM_S2D(x,y) ((x) | ARM_FP_DOUBLE) -/* Mask to strip off fp flags */ +// Mask to strip off fp flags. #define ARM_FP_REG_MASK (ARM_FP_REG_OFFSET-1) -/* RegisterLocation templates return values (r0, or r0/r1) */ +// RegisterLocation templates return values (r0, or r0/r1). #define ARM_LOC_C_RETURN {kLocPhysReg, 0, 0, 0, 0, 0, 0, 0, 1, r0, INVALID_REG,\ INVALID_SREG, INVALID_SREG} #define ARM_LOC_C_RETURN_WIDE {kLocPhysReg, 1, 0, 0, 0, 0, 0, 0, 1, r0, r1, \ @@ -210,7 +211,7 @@ enum ArmNativeRegisterPool { dr15 = fr30 + ARM_FP_DOUBLE, }; -/* Target-independent aliases */ +// Target-independent aliases. #define rARM_ARG0 r0 #define rARM_ARG1 r1 #define rARM_ARG2 r2 @@ -224,7 +225,6 @@ enum ArmNativeRegisterPool { #define rARM_INVOKE_TGT rARM_LR #define rARM_COUNT INVALID_REG -/* Shift encodings */ enum ArmShiftEncodings { kArmLsl = 0x0, kArmLsr = 0x1, @@ -238,326 +238,216 @@ enum ArmShiftEncodings { * Assemble.cc. */ enum ArmOpcode { - /************************************************************************/ kArmFirst = 0, - kArm16BitData = kArmFirst, /* DATA [0] rd[15..0] */ - kThumbAdcRR, /* adc [0100000101] rm[5..3] rd[2..0] */ - kThumbAddRRI3, /* add(1) [0001110] imm_3[8..6] rn[5..3] rd[2..0]*/ - kThumbAddRI8, /* add(2) [00110] rd[10..8] imm_8[7..0] */ - kThumbAddRRR, /* add(3) [0001100] rm[8..6] rn[5..3] rd[2..0] */ - kThumbAddRRLH, /* add(4) [01000100] H12[01] rm[5..3] rd[2..0] */ - kThumbAddRRHL, /* add(4) [01001000] H12[10] rm[5..3] rd[2..0] */ - kThumbAddRRHH, /* add(4) [01001100] H12[11] rm[5..3] rd[2..0] */ - kThumbAddPcRel, /* add(5) [10100] rd[10..8] imm_8[7..0] */ - kThumbAddSpRel, /* add(6) [10101] rd[10..8] imm_8[7..0] */ - kThumbAddSpI7, /* add(7) [101100000] imm_7[6..0] */ - kThumbAndRR, /* and [0100000000] rm[5..3] rd[2..0] */ - kThumbAsrRRI5, /* asr(1) [00010] imm_5[10..6] rm[5..3] rd[2..0] */ - kThumbAsrRR, /* asr(2) [0100000100] rs[5..3] rd[2..0] */ - kThumbBCond, /* b(1) [1101] cond[11..8] offset_8[7..0] */ - kThumbBUncond, /* b(2) [11100] offset_11[10..0] */ - kThumbBicRR, /* bic [0100001110] rm[5..3] rd[2..0] */ - kThumbBkpt, /* bkpt [10111110] imm_8[7..0] */ - kThumbBlx1, /* blx(1) [111] H[10] offset_11[10..0] */ - kThumbBlx2, /* blx(1) [111] H[01] offset_11[10..0] */ - kThumbBl1, /* blx(1) [111] H[10] offset_11[10..0] */ - kThumbBl2, /* blx(1) [111] H[11] offset_11[10..0] */ - kThumbBlxR, /* blx(2) [010001111] rm[6..3] [000] */ - kThumbBx, /* bx [010001110] H2[6..6] rm[5..3] SBZ[000] */ - kThumbCmnRR, /* cmn [0100001011] rm[5..3] rd[2..0] */ - kThumbCmpRI8, /* cmp(1) [00101] rn[10..8] imm_8[7..0] */ - kThumbCmpRR, /* cmp(2) [0100001010] rm[5..3] rd[2..0] */ - kThumbCmpLH, /* cmp(3) [01000101] H12[01] rm[5..3] rd[2..0] */ - kThumbCmpHL, /* cmp(3) [01000110] H12[10] rm[5..3] rd[2..0] */ - kThumbCmpHH, /* cmp(3) [01000111] H12[11] rm[5..3] rd[2..0] */ - kThumbEorRR, /* eor [0100000001] rm[5..3] rd[2..0] */ - kThumbLdmia, /* ldmia [11001] rn[10..8] reglist [7..0] */ - kThumbLdrRRI5, /* ldr(1) [01101] imm_5[10..6] rn[5..3] rd[2..0] */ - kThumbLdrRRR, /* ldr(2) [0101100] rm[8..6] rn[5..3] rd[2..0] */ - kThumbLdrPcRel, /* ldr(3) [01001] rd[10..8] imm_8[7..0] */ - kThumbLdrSpRel, /* ldr(4) [10011] rd[10..8] imm_8[7..0] */ - kThumbLdrbRRI5, /* ldrb(1) [01111] imm_5[10..6] rn[5..3] rd[2..0] */ - kThumbLdrbRRR, /* ldrb(2) [0101110] rm[8..6] rn[5..3] rd[2..0] */ - kThumbLdrhRRI5, /* ldrh(1) [10001] imm_5[10..6] rn[5..3] rd[2..0] */ - kThumbLdrhRRR, /* ldrh(2) [0101101] rm[8..6] rn[5..3] rd[2..0] */ - kThumbLdrsbRRR, /* ldrsb [0101011] rm[8..6] rn[5..3] rd[2..0] */ - kThumbLdrshRRR, /* ldrsh [0101111] rm[8..6] rn[5..3] rd[2..0] */ - kThumbLslRRI5, /* lsl(1) [00000] imm_5[10..6] rm[5..3] rd[2..0] */ - kThumbLslRR, /* lsl(2) [0100000010] rs[5..3] rd[2..0] */ - kThumbLsrRRI5, /* lsr(1) [00001] imm_5[10..6] rm[5..3] rd[2..0] */ - kThumbLsrRR, /* lsr(2) [0100000011] rs[5..3] rd[2..0] */ - kThumbMovImm, /* mov(1) [00100] rd[10..8] imm_8[7..0] */ - kThumbMovRR, /* mov(2) [0001110000] rn[5..3] rd[2..0] */ - kThumbMovRR_H2H, /* mov(3) [01000111] H12[11] rm[5..3] rd[2..0] */ - kThumbMovRR_H2L, /* mov(3) [01000110] H12[01] rm[5..3] rd[2..0] */ - kThumbMovRR_L2H, /* mov(3) [01000101] H12[10] rm[5..3] rd[2..0] */ - kThumbMul, /* mul [0100001101] rm[5..3] rd[2..0] */ - kThumbMvn, /* mvn [0100001111] rm[5..3] rd[2..0] */ - kThumbNeg, /* neg [0100001001] rm[5..3] rd[2..0] */ - kThumbOrr, /* orr [0100001100] rm[5..3] rd[2..0] */ - kThumbPop, /* pop [1011110] r[8..8] rl[7..0] */ - kThumbPush, /* push [1011010] r[8..8] rl[7..0] */ - kThumbRorRR, /* ror [0100000111] rs[5..3] rd[2..0] */ - kThumbSbc, /* sbc [0100000110] rm[5..3] rd[2..0] */ - kThumbStmia, /* stmia [11000] rn[10..8] reglist [7.. 0] */ - kThumbStrRRI5, /* str(1) [01100] imm_5[10..6] rn[5..3] rd[2..0] */ - kThumbStrRRR, /* str(2) [0101000] rm[8..6] rn[5..3] rd[2..0] */ - kThumbStrSpRel, /* str(3) [10010] rd[10..8] imm_8[7..0] */ - kThumbStrbRRI5, /* strb(1) [01110] imm_5[10..6] rn[5..3] rd[2..0] */ - kThumbStrbRRR, /* strb(2) [0101010] rm[8..6] rn[5..3] rd[2..0] */ - kThumbStrhRRI5, /* strh(1) [10000] imm_5[10..6] rn[5..3] rd[2..0] */ - kThumbStrhRRR, /* strh(2) [0101001] rm[8..6] rn[5..3] rd[2..0] */ - kThumbSubRRI3, /* sub(1) [0001111] imm_3[8..6] rn[5..3] rd[2..0]*/ - kThumbSubRI8, /* sub(2) [00111] rd[10..8] imm_8[7..0] */ - kThumbSubRRR, /* sub(3) [0001101] rm[8..6] rn[5..3] rd[2..0] */ - kThumbSubSpI7, /* sub(4) [101100001] imm_7[6..0] */ - kThumbSwi, /* swi [11011111] imm_8[7..0] */ - kThumbTst, /* tst [0100001000] rm[5..3] rn[2..0] */ - kThumb2Vldrs, /* vldr low sx [111011011001] rn[19..16] rd[15-12] - [1010] imm_8[7..0] */ - kThumb2Vldrd, /* vldr low dx [111011011001] rn[19..16] rd[15-12] - [1011] imm_8[7..0] */ - kThumb2Vmuls, /* vmul vd, vn, vm [111011100010] rn[19..16] - rd[15-12] [10100000] rm[3..0] */ - kThumb2Vmuld, /* vmul vd, vn, vm [111011100010] rn[19..16] - rd[15-12] [10110000] rm[3..0] */ - kThumb2Vstrs, /* vstr low sx [111011011000] rn[19..16] rd[15-12] - [1010] imm_8[7..0] */ - kThumb2Vstrd, /* vstr low dx [111011011000] rn[19..16] rd[15-12] - [1011] imm_8[7..0] */ - kThumb2Vsubs, /* vsub vd, vn, vm [111011100011] rn[19..16] - rd[15-12] [10100040] rm[3..0] */ - kThumb2Vsubd, /* vsub vd, vn, vm [111011100011] rn[19..16] - rd[15-12] [10110040] rm[3..0] */ - kThumb2Vadds, /* vadd vd, vn, vm [111011100011] rn[19..16] - rd[15-12] [10100000] rm[3..0] */ - kThumb2Vaddd, /* vadd vd, vn, vm [111011100011] rn[19..16] - rd[15-12] [10110000] rm[3..0] */ - kThumb2Vdivs, /* vdiv vd, vn, vm [111011101000] rn[19..16] - rd[15-12] [10100000] rm[3..0] */ - kThumb2Vdivd, /* vdiv vd, vn, vm [111011101000] rn[19..16] - rd[15-12] [10110000] rm[3..0] */ - kThumb2VcvtIF, /* vcvt.F32 vd, vm [1110111010111000] vd[15..12] - [10101100] vm[3..0] */ - kThumb2VcvtID, /* vcvt.F64 vd, vm [1110111010111000] vd[15..12] - [10111100] vm[3..0] */ - kThumb2VcvtFI, /* vcvt.S32.F32 vd, vm [1110111010111101] vd[15..12] - [10101100] vm[3..0] */ - kThumb2VcvtDI, /* vcvt.S32.F32 vd, vm [1110111010111101] vd[15..12] - [10111100] vm[3..0] */ - kThumb2VcvtFd, /* vcvt.F64.F32 vd, vm [1110111010110111] vd[15..12] - [10101100] vm[3..0] */ - kThumb2VcvtDF, /* vcvt.F32.F64 vd, vm [1110111010110111] vd[15..12] - [10111100] vm[3..0] */ - kThumb2Vsqrts, /* vsqrt.f32 vd, vm [1110111010110001] vd[15..12] - [10101100] vm[3..0] */ - kThumb2Vsqrtd, /* vsqrt.f64 vd, vm [1110111010110001] vd[15..12] - [10111100] vm[3..0] */ - kThumb2MovImmShift,/* mov(T2) rd, # [11110] i [00001001111] - imm3 rd[11..8] imm8 */ - kThumb2MovImm16, /* mov(T3) rd, # [11110] i [0010100] imm4 [0] - imm3 rd[11..8] imm8 */ - kThumb2StrRRI12, /* str(Imm,T3) rd,[rn,#imm12] [111110001100] - rn[19..16] rt[15..12] imm12[11..0] */ - kThumb2LdrRRI12, /* str(Imm,T3) rd,[rn,#imm12] [111110001100] - rn[19..16] rt[15..12] imm12[11..0] */ - kThumb2StrRRI8Predec, /* str(Imm,T4) rd,[rn,#-imm8] [111110000100] - rn[19..16] rt[15..12] [1100] imm[7..0]*/ - kThumb2LdrRRI8Predec, /* ldr(Imm,T4) rd,[rn,#-imm8] [111110000101] - rn[19..16] rt[15..12] [1100] imm[7..0]*/ - kThumb2Cbnz, /* cbnz rd,