if (varTypeIsFloating(treeNode) != varTypeIsFloating(op1))
{
-#if 0
- instruction ins;
- regNumber fpReg;
- regNumber intReg;
- if(varTypeIsFloating(treeNode))
- {
- ins = INS_mov_i2xmm;
- fpReg = targetReg;
- intReg = op1->gtRegNum;
- }
- else
- {
- ins = INS_mov_xmm2i;
- intReg = targetReg;
- fpReg = op1->gtRegNum;
- }
- inst_RV_RV(ins, fpReg, intReg, targetType);
-#else
- NYI_ARM64("CodeGen - FP/Int RegCopy");
-#endif
+ inst_RV_RV(INS_fmov, targetReg, genConsumeReg(op1), targetType);
}
else
{
else
#endif // !defined(_TARGET_64BIT_)
{
+
+#ifdef _TARGET_ARM64_
+ // For vararg call, reg args should be all integer.
+ // Insert a copy to move float value to integer register.
+ if (call->IsVarargs() && varTypeIsFloating(type))
+ {
+ var_types intType = (type == TYP_DOUBLE) ? TYP_LONG : TYP_INT;
+ GenTreePtr intArg = comp->gtNewOperNode(GT_COPY, intType, arg);
+
+ intArg->CopyCosts(arg);
+ info->node = intArg;
+ SpliceInUnary(call, ppArg, intArg);
+
+ // Update arg/type with new ones.
+ arg = intArg;
+ type = intType;
+ }
+#endif
+
putArg = NewPutArg(call, arg, info, type);
// In the case of register passable struct (in one or two registers)
WorkingDir=JIT\jit64\mcc\interop\mcc_i80
Expected=0
MaxAllowedDurationSeconds=600
-Categories=Pri0;EXPECTED_FAIL;ISSUE_2989
+Categories=Pri0;EXPECTED_PASS
HostStyle=0
[mcc_i81.cmd_1741]
RelativePath=JIT\jit64\mcc\interop\mcc_i81\mcc_i81.cmd
WorkingDir=JIT\jit64\mcc\interop\mcc_i81
Expected=0
MaxAllowedDurationSeconds=600
-Categories=Pri0;EXPECTED_FAIL
+Categories=Pri0;EXPECTED_PASS
HostStyle=0
[mcc_i82.cmd_1742]
RelativePath=JIT\jit64\mcc\interop\mcc_i82\mcc_i82.cmd
WorkingDir=JIT\jit64\mcc\interop\mcc_i82
Expected=0
MaxAllowedDurationSeconds=600
-Categories=Pri0;EXPECTED_FAIL;ISSUE_2989
+Categories=Pri0;EXPECTED_PASS
HostStyle=0
[mcc_i83.cmd_1743]
RelativePath=JIT\jit64\mcc\interop\mcc_i83\mcc_i83.cmd
WorkingDir=JIT\Regression\CLR-x86-JIT\V1-M09.5-PDC\b16423\b16423
Expected=0
MaxAllowedDurationSeconds=600
-Categories=Pri0;JIT;EXPECTED_FAIL;ISSUE_2925;ISSUE_2989
+Categories=Pri0;JIT;EXPECTED_PASS
HostStyle=0
[b16498.cmd_4680]
RelativePath=JIT\Regression\CLR-x86-JIT\V1-M09.5-PDC\b16498\b16498\b16498.cmd
WorkingDir=JIT\Regression\CLR-x86-JIT\V1-M09.5-PDC\b32374\b32374
Expected=0
MaxAllowedDurationSeconds=600
-Categories=Pri0;JIT;EXPECTED_FAIL;ISSUE_2989
+Categories=Pri0;JIT;EXPECTED_PASS
HostStyle=0
[b32551a.cmd_4786]
RelativePath=JIT\Regression\CLR-x86-JIT\V1-M09.5-PDC\b32551\b32551a\b32551a.cmd
WorkingDir=JIT\Regression\CLR-x86-JIT\V1-M11-Beta1\b41391\b41391
Expected=0
MaxAllowedDurationSeconds=600
-Categories=Pri0;JIT;EXPECTED_FAIL;ISSUE_2989
+Categories=Pri0;JIT;EXPECTED_PASS
HostStyle=0
[b41470.cmd_4907]
RelativePath=JIT\Regression\CLR-x86-JIT\V1-M11-Beta1\b41470\b41470\b41470.cmd
WorkingDir=JIT\Regression\CLR-x86-JIT\V1-M11-Beta1\b41621\b41621
Expected=0
MaxAllowedDurationSeconds=600
-Categories=Pri0;JIT;EXPECTED_FAIL;REL_PASS;ISSUE_2989
+Categories=Pri0;JIT;EXPECTED_PASS
HostStyle=0
[b41627.cmd_4911]
RelativePath=JIT\Regression\CLR-x86-JIT\V1-M11-Beta1\b41627\b41627\b41627.cmd
WorkingDir=JIT\Regression\CLR-x86-JIT\V1-M11-Beta1\b46867\b46867
Expected=0
MaxAllowedDurationSeconds=600
-Categories=Pri0;JIT;EXPECTED_FAIL;ISSUE_2989
+Categories=Pri0;JIT;EXPECTED_PASS
HostStyle=0
[b46897.cmd_4969]
RelativePath=JIT\Regression\CLR-x86-JIT\V1-M11-Beta1\b46897\b46897\b46897.cmd