internal sealed override void Emit(CodeEmitter ilgen) { LocalBuilder value1 = ilgen.AllocTempLocal(FloatOrDouble()); LocalBuilder value2 = ilgen.AllocTempLocal(FloatOrDouble()); ilgen.Emit(OpCodes.Stloc, value2); ilgen.Emit(OpCodes.Stloc, value1); ilgen.Emit(OpCodes.Ldloc, value1); ilgen.Emit(OpCodes.Ldloc, value2); ilgen.Emit(OpCodes.Cgt_Un); ilgen.Emit(OpCodes.Ldloc, value1); ilgen.Emit(OpCodes.Ldloc, value2); ilgen.Emit(OpCodes.Clt); ilgen.Emit(OpCodes.Sub); ilgen.ReleaseTempLocal(value1); ilgen.ReleaseTempLocal(value2); }
internal sealed override void Emit(CodeEmitter ilgen) { LocalBuilder value1 = ilgen.AllocTempLocal(Types.Int64); LocalBuilder value2 = ilgen.AllocTempLocal(Types.Int64); ilgen.Emit(OpCodes.Stloc, value2); ilgen.Emit(OpCodes.Stloc, value1); ilgen.Emit(OpCodes.Ldloc, value1); ilgen.Emit(OpCodes.Ldloc, value2); ilgen.Emit(OpCodes.Cgt); ilgen.Emit(OpCodes.Ldloc, value1); ilgen.Emit(OpCodes.Ldloc, value2); ilgen.Emit(OpCodes.Clt); ilgen.Emit(OpCodes.Sub); ilgen.ReleaseTempLocal(value2); ilgen.ReleaseTempLocal(value1); }
protected override void EmitSetImpl(CodeEmitter ilgen) { // NOTE even though the field is final, JNI reflection can still be used to set its value! CodeEmitterLocal temp = ilgen.AllocTempLocal(underlyingType); ilgen.Emit(OpCodes.Stloc, temp); ilgen.Emit(OpCodes.Unbox, underlyingType); ilgen.Emit(OpCodes.Ldloc, temp); ilgen.Emit(OpCodes.Stobj, underlyingType); ilgen.ReleaseTempLocal(temp); }