75 @Override 76 public void emitEpilogue() { 77 recordMark(config.MARKID_DEOPT_HANDLER_ENTRY); 78 recordCall(new HotSpotForeignCallTarget(config.handleDeoptStub), 4, true, null); 79 code.emitInt(1 << 30); // CALL 80 } 81 82 @Override 83 public HotSpotCompiledCode finish(HotSpotResolvedJavaMethod method) { 84 frameSize += SPARC.REGISTER_SAFE_AREA_SIZE; 85 return super.finish(method); 86 } 87 88 @Override 89 public void emitGrowStack(int size) { 90 emitOp3(0b10, SPARC.sp, 0b000100, SPARC.sp, size); // SUB sp, size, sp 91 } 92 93 @Override 94 public Register emitIntArg0() { 95 return codeCache.getRegisterConfig().getCallingConventionRegisters(HotSpotCallingConventionType.JavaCallee, JavaKind.Int)[0]; 96 } 97 98 @Override 99 public Register emitIntArg1() { 100 return codeCache.getRegisterConfig().getCallingConventionRegisters(HotSpotCallingConventionType.JavaCallee, JavaKind.Int)[1]; 101 } 102 103 @Override 104 public Register emitLoadInt(int c) { 105 Register ret = newRegister(); 106 int hi = c >>> 10; 107 int lo = c & ((1 << 10) - 1); 108 if (hi == 0) { 109 emitOp3(0b10, ret, 0b000010, SPARC.g0, lo); // OR g0, lo, ret 110 } else { 111 emitOp2(ret, 0b100, hi); // SETHI hi, ret 112 if (lo != 0) { 113 emitOp3(0b10, ret, 0b000010, ret, lo); // OR ret, lo, ret 114 } 115 } 116 return ret; 117 } 118 119 @Override 120 public Register emitLoadLong(long c) { | 75 @Override 76 public void emitEpilogue() { 77 recordMark(config.MARKID_DEOPT_HANDLER_ENTRY); 78 recordCall(new HotSpotForeignCallTarget(config.handleDeoptStub), 4, true, null); 79 code.emitInt(1 << 30); // CALL 80 } 81 82 @Override 83 public HotSpotCompiledCode finish(HotSpotResolvedJavaMethod method) { 84 frameSize += SPARC.REGISTER_SAFE_AREA_SIZE; 85 return super.finish(method); 86 } 87 88 @Override 89 public void emitGrowStack(int size) { 90 emitOp3(0b10, SPARC.sp, 0b000100, SPARC.sp, size); // SUB sp, size, sp 91 } 92 93 @Override 94 public Register emitIntArg0() { 95 return codeCache.getRegisterConfig().getCallingConventionRegisters(HotSpotCallingConventionType.JavaCallee, JavaKind.Int).get(0); 96 } 97 98 @Override 99 public Register emitIntArg1() { 100 return codeCache.getRegisterConfig().getCallingConventionRegisters(HotSpotCallingConventionType.JavaCallee, JavaKind.Int).get(1); 101 } 102 103 @Override 104 public Register emitLoadInt(int c) { 105 Register ret = newRegister(); 106 int hi = c >>> 10; 107 int lo = c & ((1 << 10) - 1); 108 if (hi == 0) { 109 emitOp3(0b10, ret, 0b000010, SPARC.g0, lo); // OR g0, lo, ret 110 } else { 111 emitOp2(ret, 0b100, hi); // SETHI hi, ret 112 if (lo != 0) { 113 emitOp3(0b10, ret, 0b000010, ret, lo); // OR ret, lo, ret 114 } 115 } 116 return ret; 117 } 118 119 @Override 120 public Register emitLoadLong(long c) { |