[kaffe] CVS kaffe (dalibor): Added missing files

Kaffe CVS Kaffe Mailing List <kaffe@kaffe.org>
Fri Dec 12 11:24:02 2003


PatchSet 4221 
Date: 2003/12/12 19:09:02
Author: dalibor
Branch: HEAD
Tag: (none) 
Log:
Added missing files

Members: 
	config/parisc/sysdepCallMethod.h:INITIAL->1.1 

===================================================================
Checking out kaffe/config/parisc/sysdepCallMethod.h
RCS:  /home/cvs/kaffe/kaffe/config/parisc/sysdepCallMethod.h,v
VERS: 1.1
***************
--- /dev/null	Sun Aug  4 19:57:58 2002
+++ kaffe/config/parisc/sysdepCallMethod.h	Fri Dec 12 19:11:32 2003
@@ -0,0 +1,70 @@
+/*
+ * parisc/sysdepCallMethod.h
+ * Common configuration information for PA-RISC based machines.
+ *
+ * Copyright (c) 1996, 1997, 1998
+ *      Transvirtual Technologies, Inc.  All rights reserved.
+ *
+ * Copyright (c) 2003
+ *      Kaffe.org contributors. See ChangeLog for details.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file.
+ *
+ * sysdepCallMethod is written by Pavel Roskin <pavel_roskin@geocities.com>
+ */
+
+#ifndef __parisc_sysdepCallMethod_h
+#define __parisc_sysdepCallMethod_h
+
+#include "support.h"
+
+typedef jdouble d4int_f (int, int, int, int);
+typedef jfloat f4int_f (int, int, int, int);
+typedef jlong j4int_f (int, int, int, int);
+
+#if NEED_sysdepCallMethod
+/* FIXME: this doesn't work for parisc-linux, because on parisc-linux
+ * there is no fparg relocation, so we cannot just pass everything in
+ * general purpose registers
+ */
+
+static inline void sysdepCallMethod(callMethodInfo *call)
+{
+  int argidx;
+  int *sa;
+  int *stackx;
+  int st_reserve[(call)->nrargs];
+  asm volatile ("ldo -36(%%r30),%0" : "=r" (sa) : "r" (st_reserve));
+  for (argidx = 0, stackx = sa; argidx < (call)->nrargs; argidx++)
+    switch ((call)->callsize[argidx])
+      {
+      case 1:
+	*stackx-- = (call)->args[argidx].i;
+	break;
+      case 2:
+	if (!((int)stackx & 4)) stackx--;
+	*stackx-- = (int) ((call)->args[argidx].j);
+	*stackx-- = (call)->args[argidx].i;
+	argidx++;
+      default:
+	break;
+      }
+  if ((call)->rettype == 'F') {
+    (call)->ret->f =
+      ((f4int_f *) ((call)->function)) (sa[0], sa[-1], sa[-2], sa[-3]);
+    break;
+  }
+  if ((call)->rettype == 'D') {
+    (call)->ret->d =
+      ((d4int_f *) ((call)->function)) (sa[0], sa[-1], sa[-2], sa[-3]);
+    break;
+  }
+  (call)->ret->j =
+    ((j4int_f *) ((call)->function)) (sa[0], sa[-1], sa[-2], sa[-3]);
+}
+
+#endif /* NEED_sysdepCallMethod */
+
+#endif /* __parisc_sysdepCallMethod_h */
+