[ppc] add native type support for integer
authorBernhard Urban <bernhard.urban@xamarin.com>
Wed, 20 Sep 2017 09:55:34 +0000 (11:55 +0200)
committerBernhard Urban <bernhard.urban@xamarin.com>
Mon, 25 Sep 2017 16:01:15 +0000 (18:01 +0200)
mono/mini/cpu-ppc.md
mono/mini/mini-ppc.c

index 65cdc9b149dd3c28f06edd9b80af305577919846..e7544570c050474dc918a94ec34ffb796c3e9a21 100644 (file)
@@ -289,6 +289,12 @@ int_cgt_un: dest:i len:12
 int_clt: dest:i len:12
 int_clt_un: dest:i len:12
 
+int_cneq: dest:i len:12
+int_cge: dest:i len:12
+int_cle: dest:i len:12
+int_cge_un: dest:i len:12
+int_cle_un: dest:i len:12
+
 cond_exc_ieq: len:8
 cond_exc_ine_un: len:8
 cond_exc_ilt: len:8
index 1a947639a241d3692584586ae0a099a69ecc9856..60d9475dfe31a8b80b1b5322a8026008b4ad94ee 100644 (file)
@@ -1005,8 +1005,7 @@ get_call_info (MonoMethodSignature *sig)
        fr = PPC_FIRST_FPARG_REG;
        gr = PPC_FIRST_ARG_REG;
 
-       /* FIXME: handle returning a struct */
-       if (MONO_TYPE_ISSTRUCT (sig->ret)) {
+       if (mini_type_is_vtype (sig->ret)) {
                cinfo->vtype_retaddr = TRUE;
        }
 
@@ -4126,6 +4125,11 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        ppc_mtctr (code, ins->sreg1);
                        ppc_bcctr (code, PPC_BR_ALWAYS, 0);
                        break;
+               case OP_ICNEQ:
+                       ppc_li (code, ins->dreg, 0);
+                       ppc_bc (code, PPC_BR_TRUE, PPC_BR_EQ, 2);
+                       ppc_li (code, ins->dreg, 1);
+                       break;
                case OP_CEQ:
                case OP_ICEQ:
                CASE_PPC64 (OP_LCEQ)
@@ -4143,6 +4147,12 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        ppc_bc (code, PPC_BR_TRUE, PPC_BR_LT, 2);
                        ppc_li (code, ins->dreg, 0);
                        break;
+               case OP_ICGE:
+               case OP_ICGE_UN:
+                       ppc_li (code, ins->dreg, 1);
+                       ppc_bc (code, PPC_BR_FALSE, PPC_BR_LT, 2);
+                       ppc_li (code, ins->dreg, 0);
+                       break;
                case OP_CGT:
                case OP_CGT_UN:
                case OP_ICGT:
@@ -4153,6 +4163,12 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        ppc_bc (code, PPC_BR_TRUE, PPC_BR_GT, 2);
                        ppc_li (code, ins->dreg, 0);
                        break;
+               case OP_ICLE:
+               case OP_ICLE_UN:
+                       ppc_li (code, ins->dreg, 1);
+                       ppc_bc (code, PPC_BR_FALSE, PPC_BR_GT, 2);
+                       ppc_li (code, ins->dreg, 0);
+                       break;
                case OP_COND_EXC_EQ:
                case OP_COND_EXC_NE_UN:
                case OP_COND_EXC_LT: