[vmkit-commits] [vmkit] r198507 - Implements some bytecode. Only 13 bytecodes are still missing.

Gael Thomas gael.thomas at lip6.fr
Sat Jan 4 09:54:32 PST 2014


Author: gthomas
Date: Sat Jan  4 11:54:31 2014
New Revision: 198507

URL: http://llvm.org/viewvc/llvm-project?rev=198507&view=rev
Log:
Implements some bytecode. Only 13 bytecodes are still missing.

Modified:
    vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc

Modified: vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc?rev=198507&r1=198506&r2=198507&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc Sat Jan  4 11:54:31 2014
@@ -1144,6 +1144,7 @@ void J3CodeGen::translate() {
 				break;
 
 			case J3Cst::BC_pop2: nyi();                   /* 0x58 */
+
 			case J3Cst::BC_dup:                           /* 0x59 */
 				stack.push(stack.top());
 				break;
@@ -1289,24 +1290,53 @@ void J3CodeGen::translate() {
 				stack.push(builder->CreateSIToFP(stack.pop(), vm->typeDouble->llvmType()));
 				break;
 
-			case J3Cst::BC_l2i: nyi();                    /* 0x88 */
-			case J3Cst::BC_l2f: nyi();                    /* 0x89 */
-			case J3Cst::BC_l2d: nyi();                    /* 0x8a */
+			case J3Cst::BC_l2i:                           /* 0x88 */
+				stack.push(builder->CreateTruncOrBitCast(stack.pop(), builder->getInt32Ty()));
+				break;
+
+			case J3Cst::BC_l2f:                           /* 0x89 */
+				stack.push(builder->CreateSIToFP(stack.pop(), vm->typeFloat->llvmType()));
+				break;
+
+			case J3Cst::BC_l2d:                           /* 0x8a */
+				stack.push(builder->CreateSIToFP(stack.pop(), vm->typeDouble->llvmType()));
+				break;
+
 			case J3Cst::BC_f2i:                           /* 0x8b */
 				floatToInteger(vm->typeFloat, vm->typeInteger);
 				break;
 
-			case J3Cst::BC_f2l: nyi();                    /* 0x8c */
-			case J3Cst::BC_f2d: nyi();                    /* 0x8d */
-			case J3Cst::BC_d2i: nyi();                    /* 0x8e */
-			case J3Cst::BC_d2l: nyi();                    /* 0x8f */
-			case J3Cst::BC_d2f: nyi();                    /* 0x90 */
-			case J3Cst::BC_i2b: nyi();                    /* 0x91 */
+			case J3Cst::BC_f2l:                           /* 0x8c */
+				floatToInteger(vm->typeFloat, vm->typeLong);
+				break;
+
+			case J3Cst::BC_f2d:                           /* 0x8d */
+				stack.push(builder->CreateFPExt(stack.pop(), vm->typeDouble->llvmType()));
+				break;
+
+			case J3Cst::BC_d2i:                           /* 0x8e */
+				floatToInteger(vm->typeDouble, vm->typeInteger);
+				break;
+
+			case J3Cst::BC_d2l:                           /* 0x8f */
+				floatToInteger(vm->typeDouble, vm->typeLong);
+				break;
+
+			case J3Cst::BC_d2f:                           /* 0x90 */
+				stack.push(builder->CreateFPTrunc(stack.pop(), vm->typeFloat->llvmType()));
+				break;
+
+			case J3Cst::BC_i2b:                           /* 0x91 */
+				stack.push(builder->CreateSExt(builder->CreateTrunc(stack.pop(), builder->getInt8Ty()), builder->getInt32Ty()));
+				break;
+
 			case J3Cst::BC_i2c:                           /* 0x92 */
 				stack.push(builder->CreateZExt(builder->CreateTrunc(stack.pop(), builder->getInt16Ty()), builder->getInt32Ty()));
 				break;
 
-			case J3Cst::BC_i2s: nyi();                    /* 0x93 */
+			case J3Cst::BC_i2s:                           /* 0x93 */
+				stack.push(builder->CreateSExt(builder->CreateTrunc(stack.pop(), builder->getInt16Ty()), builder->getInt32Ty()));
+				break;
 
 			case J3Cst::BC_lcmp:                          /* 0x94 */
 				compareLong();





More information about the vmkit-commits mailing list