* src/vm/jit/mips/emit.c (emit_load): New function.
authoredwin <none@none>
Wed, 6 Sep 2006 10:09:01 +0000 (10:09 +0000)
committeredwin <none@none>
Wed, 6 Sep 2006 10:09:01 +0000 (10:09 +0000)
(emit_load_s1): Implemented in terms of emit_load.
(emit_load_s2): Likewise.
(emit_load_s3): Likewise.
(emit_store_dst): New function.

--HG--
branch : new_instruction_format

src/vm/jit/mips/emit.c

index d8d0dbbadc66f42a849a8d828bceac03692046ce..2f7dbfe87ffe72778140a7b8d6c1a0d54edab5e3 100644 (file)
 
 /* code generation functions **************************************************/
 
-/* emit_load_s1 ****************************************************************
+/* emit_load *******************************************************************
 
-   Emits a possible load of the first source operand.
+   Emits a possible load of an operand.
 
 *******************************************************************************/
 
-s4 emit_load_s1(jitdata *jd, instruction *iptr, stackptr src, s4 tempreg)
+s4 emit_load(jitdata *jd, instruction *iptr, stackptr src, s4 tempreg)
 {
        codegendata  *cd;
        s4            disp;
@@ -93,39 +93,39 @@ s4 emit_load_s1(jitdata *jd, instruction *iptr, stackptr src, s4 tempreg)
        return reg;
 }
 
+/* emit_load_s1 ****************************************************************
 
-/* emit_load_s2 ****************************************************************
-
-   Emits a possible load of the second source operand.
+   Emits a possible load of the first source operand.
 
 *******************************************************************************/
 
-s4 emit_load_s2(jitdata *jd, instruction *iptr, stackptr src, s4 tempreg)
+s4 emit_load_s1(jitdata *jd, instruction *iptr, stackptr src, s4 tempreg)
 {
-       codegendata  *cd;
-       s4            disp;
-       s4            reg;
+       stackptr src;
+       s4       reg;
 
-       /* get required compiler data */
+       src = iptr->s1.var;
 
-       cd = jd->cd;
+       reg = emit_load(jd, iptr, src, tempreg);
 
-       if (src->flags & INMEMORY) {
-               COUNT_SPILLS;
+       return reg;
+}
 
-               disp = src->regoff * 8;
 
-               if (IS_FLT_DBL_TYPE(src->type)) {
-                       if (IS_2_WORD_TYPE(src->type))
-                               M_DLD(tempreg, REG_SP, disp);
-                       else
-                               M_FLD(tempreg, REG_SP, disp);
-               } else
-                       M_LLD(tempreg, REG_SP, disp);
+/* emit_load_s2 ****************************************************************
 
-               reg = tempreg;
-       } else
-               reg = src->regoff;
+   Emits a possible load of the second source operand.
+
+*******************************************************************************/
+
+s4 emit_load_s2(jitdata *jd, instruction *iptr, stackptr src, s4 tempreg)
+{
+       stackptr src;
+       s4       reg;
+
+       src = iptr->sx.s23.s2.var;
+
+       reg = emit_load(jd, iptr, src, tempreg);
 
        return reg;
 }
@@ -139,30 +139,12 @@ s4 emit_load_s2(jitdata *jd, instruction *iptr, stackptr src, s4 tempreg)
 
 s4 emit_load_s3(jitdata *jd, instruction *iptr, stackptr src, s4 tempreg)
 {
-       codegendata  *cd;
-       s4            disp;
-       s4            reg;
-
-       /* get required compiler data */
-
-       cd = jd->cd;
+       stackptr src;
+       s4       reg;
 
-       if (src->flags & INMEMORY) {
-               COUNT_SPILLS;
-
-               disp = src->regoff * 8;
-
-               if (IS_FLT_DBL_TYPE(src->type)) {
-                       if (IS_2_WORD_TYPE(src->type))
-                               M_DLD(tempreg, REG_SP, disp);
-                       else
-                               M_FLD(tempreg, REG_SP, disp);
-               } else
-                       M_LLD(tempreg, REG_SP, disp);
+       src = iptr->sx.s23.s3.var;
 
-               reg = tempreg;
-       } else
-               reg = src->regoff;
+       reg = emit_load(jd, iptr, src, tempreg);
 
        return reg;
 }
@@ -170,7 +152,7 @@ s4 emit_load_s3(jitdata *jd, instruction *iptr, stackptr src, s4 tempreg)
 
 /* emit_store ******************************************************************
 
-   XXX
+   Emits a possible store to variable.
 
 *******************************************************************************/
 
@@ -198,6 +180,17 @@ void emit_store(jitdata *jd, instruction *iptr, stackptr dst, s4 d)
        }
 }
 
+/* emit_store_dst **************************************************************
+
+   Emits a possible store to the destination operand of an instruction.
+
+*******************************************************************************/
+
+void emit_store_dst(jitdata *jd, instruction *iptr, s4 d)
+{
+       emit_store(jd, iptr, iptr->dst.var, d);
+}
+
 
 /* emit_copy *******************************************************************
 
@@ -216,6 +209,14 @@ void emit_copy(jitdata *jd, instruction *iptr, stackptr src, stackptr dst)
        cd = jd->cd;
        rd = jd->rd;
 
+       stackptr src;
+       s4       reg;
+
+       src = iptr->sx.s23.s3.var;
+
+       reg = emit_load(jd, iptr, src, tempreg);
+
+       return reg;
        if ((src->regoff != dst->regoff) ||
                ((src->flags ^ dst->flags) & INMEMORY)) {
                d = codegen_reg_of_var(rd, iptr->opc, dst, REG_IFTMP);