diff dyncall/dyncall_callvm_mips_o32.c @ 302:d55f9d508074

- mips softfloat support for o32 callconv (calls and callbacks, little and big endian) - cleanup of some mips files, removed unnecessary file, renamings.. - doc/manual cleanups, changelog entry
author Tassilo Philipp
date Mon, 21 May 2018 02:48:12 +0200
parents f5577f6bf97a
children b104c5beec8b
line wrap: on
line diff
--- a/dyncall/dyncall_callvm_mips_o32.c	Sun May 20 02:23:44 2018 +0200
+++ b/dyncall/dyncall_callvm_mips_o32.c	Mon May 21 02:48:12 2018 +0200
@@ -77,7 +77,7 @@
 
 static void dc_callvm_argPointer_mips_o32(DCCallVM* in_self, DCpointer x)
 {
-  dc_callvm_argInt_mips_o32(in_self, * (DCint*) &x );
+  dc_callvm_argInt_mips_o32(in_self, *(DCint*)&x);
 }
 
 static void dc_callvm_argBool_mips_o32(DCCallVM* in_self, DCbool x)
@@ -100,51 +100,55 @@
   dc_callvm_argInt_mips_o32(in_self, (DCint)x);
 }
 
-static void dc_callvm_argLongLong_mips_o32(DCCallVM* in_self, DClonglong Lv)
+static void dc_callvm_argLongLong_mips_o32(DCCallVM* in_self, DClonglong x)
 {
   DCCallVM_mips_o32* self = (DCCallVM_mips_o32*)in_self;
-    
+
   /* 64-bit values need to be aligned on 8 byte boundaries */
   dcVecSkip(&self->mVecHead, dcVecSize(&self->mVecHead) & 4);
-  dcVecAppend(&self->mVecHead, &Lv, sizeof(DClonglong));
-  self->mArgCount += 1;
+  dcVecAppend(&self->mVecHead, &x, sizeof(DClonglong));
+  self->mArgCount++;
 }
 
 static void dc_callvm_argFloat_mips_o32(DCCallVM* in_self, DCfloat x)
 {
   DCCallVM_mips_o32* self = (DCCallVM_mips_o32*)in_self;
 
-  dcVecAppend(&self->mVecHead, &x, sizeof(DCfloat) );
+  dcVecAppend(&self->mVecHead, &x, sizeof(DCfloat));
+
+#if defined(DC__ABI_HARDFLOAT)
   if (self->mArgCount < 2) {
-#if defined(DC__Endian_LITTLE)
+# if defined(DC__Endian_LITTLE)
     self->mRegData.u[self->mArgCount].f[0] = x;
-#else
+# else
     self->mRegData.u[self->mArgCount].f[1] = x;
-#endif
-#if 0
+# endif
+# if 0
     self->mRegData.u[self->mArgCount].f[1] = x;
    call kernel
         
-        mips:
-        lwc1	$f12, 4($5)       <--- byte offset 4
-	lwc1	$f13, 0($5)
-	lwc1	$f14, 12($5)      <--- byte offset 12 
-	lwc1	$f15, 8($5)
-        mipsel:
-        lwc1	$f12, 0($5)       <--- byte offset 4
-	lwc1	$f13, 4($5)
-	lwc1	$f14, 8($5)      <--- byte offset 12 
-	lwc1	$f15, 12($5)
+	mips:
+	lwc1  $f12,  4($5)    <--- byte offset 4
+	lwc1  $f13,  0($5)
+	lwc1  $f14, 12($5)    <--- byte offset 12 
+	lwc1  $f15,  8($5)
+	mipsel:
+	lwc1  $f12,  0($5)    <--- byte offset 4
+	lwc1  $f13,  4($5)
+	lwc1  $f14,  8($5)    <--- byte offset 12 
+	lwc1  $f15, 12($5)
 
-#if defined(DC__Endian_LITTLE)
+#  if defined(DC__Endian_LITTLE)
     /* index 0 and 2 */
     self->mRegData.floats[self->mArgCount*2] = x;
-#else
+#  else
     /* index 1 and 3 */
     self->mRegData.floats[self->mArgCount*2+1] = x;
-#endif
-#endif
+#  endif
+# endif
   }
+#endif /* DC__ABI_HARDFLOAT */
+
   self->mArgCount++;
 }
 
@@ -153,9 +157,13 @@
   DCCallVM_mips_o32* self = (DCCallVM_mips_o32*)in_self;
   /* 64-bit values need to be aligned on 8 byte boundaries */
   dcVecSkip(&self->mVecHead, dcVecSize(&self->mVecHead) & 4);
-  dcVecAppend(&self->mVecHead, &x, sizeof(DCdouble) );
+  dcVecAppend(&self->mVecHead, &x, sizeof(DCdouble));
+
+#if defined(DC__ABI_HARDFLOAT)
   if (self->mArgCount < 2)
     self->mRegData.u[self->mArgCount].d = x;
+#endif /* DC__ABI_HARDFLOAT */
+
   self->mArgCount++;
 }