changeset 177:8304f1b31af9

- cleanup: remove old/unused code that was superseded by *sparc_v9.* files
author cslag
date Fri, 10 Feb 2017 00:46:05 +0100
parents ff0c8ee2bbc7
children 183594497726
files dyncall/dyncall_call_sparc64.S dyncall/dyncall_call_sparc64.h dyncall/dyncall_callvm_sparc64.c dyncall/dyncall_callvm_sparc64.h
diffstat 4 files changed, 0 insertions(+), 689 deletions(-) [+]
line wrap: on
line diff
--- a/dyncall/dyncall_call_sparc64.S	Thu Feb 09 16:04:51 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,362 +0,0 @@
-/*
-
- Package: dyncall
- Library: dyncall
- File: dyncall/dyncall_call_sparc64.S
- Description: Call kernel for sparc64 v9 ABI.
- License:
-
-   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
-
-   Permission to use, copy, modify, and distribute this software for any
-   purpose with or without fee is hereby granted, provided that the above
-   copyright notice and this permission notice appear in all copies.
-
-   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-*/
-
-
-
-
-/* --------------------------------------------------------------------------- 
-
-call kernel for sparc64 v9 abi
-tested on sparc64/linux/debian [gcc54.fsffrance.org - thanx to the farm!] 
-
-new C Interface:
-  void dcCall_sparc (DCCallVM* callvm, DCpointer target);
-                     %i0               %1 
-
-see dyncall_call_sparc.S for details.
-
-old C Interface:
-  void dcCall_sparc (DCpointer target, DCsize size, DCpointer data);
-		     %i0             , %i1        , %i2
-Input:
-  i0   target
-  i1   size
-  i2   data
-
-*/
-
-#define REGSIZE 8
-
-#define BIAS 2047
-
-#define ALIGN 16 
-
-#define IREGS 6
-#define FREGS 16
-#define SREGS 16
-#define IBASE  0
-#define FBASE  (IREGS*8)
-
-#define SHEAD ((16+6)*8)
-#define DHEAD  ((IREGS+FREGS)*8)+SREGS*4
-
-CALLVM_singleUseFlags = 24
-CALLVM_size    = 40
-CALLVM_dataoff = 48
-
-
-.global dcCall_sparc64
-dcCall_sparc64:
-
-/* Basic Prolog: supports up to 6 arguments. */
-	
-	/* new C interface */
-	/* o0-1: callvm,target */
-	
-	or   %o0, %g0, %o3	       /* %o3: callvm */
-	or   %o1, %g0, %o0	       /* %o0: target */
-	ldx [%o3+CALLVM_size], %o1     /* %o1: size */
-	add %o3, CALLVM_dataoff, %o2  /* %o2: data */
-	ld  [%o3+CALLVM_singleUseFlags], %o4 /* %o4: flags */
-	/*leaf functions: may use the first six output registers.*/
-	/*o0-2:target,size,data*/
-	/*o3-5:free to use */
-		
-		/* Arguments: */
-		/* %o0 = ptr to target. */
-		/* %o1 = size of data. */
-		/* %o2 = data pointer. */
-		/* %o4 = use flags. */
-
-	/* Compute a matching stack size (approximate): o3 = align(o1+136,16) */
-
-	add     %o1, SHEAD+ALIGN-1, %o3
-	and     %o3,   -ALIGN, %o3
-	neg     %o3
-	
-	/* Prolog. */
-	save	%sp, %o3, %sp	
-
-		/* Arguments: */
-		/* %i0 = ptr to target. */
-		/* %i1 = size of data. */
-		/* %i2 = data pointer. */
-		/* %i3 = stack size. */
-	
-	/* Load output registers. */
-
-	ldx	[%i2+IBASE+REGSIZE*0 ],%o0
-	ldx	[%i2+IBASE+REGSIZE*1 ],%o1
-	ldx	[%i2+IBASE+REGSIZE*2 ],%o2
-	ldx	[%i2+IBASE+REGSIZE*3 ],%o3
-	ldx	[%i2+IBASE+REGSIZE*4 ],%o4
-	ldx	[%i2+IBASE+REGSIZE*5 ],%o5
-
-	/* Load double-precision float registers. */
-
-	ldd     [%i2+FBASE+REGSIZE*0 ],%f0
-	ldd     [%i2+FBASE+REGSIZE*1 ],%f2
-	ldd     [%i2+FBASE+REGSIZE*2 ],%f4
-	ldd     [%i2+FBASE+REGSIZE*3 ],%f6
-	ldd     [%i2+FBASE+REGSIZE*4 ],%f8
-	ldd     [%i2+FBASE+REGSIZE*5 ],%f10
-	ldd     [%i2+FBASE+REGSIZE*6 ],%f12
-	ldd     [%i2+FBASE+REGSIZE*7 ],%f14
-	ldd     [%i2+FBASE+REGSIZE*8 ],%f16
-    ldd     [%i2+FBASE+REGSIZE*9 ],%f18
-	ldd     [%i2+FBASE+REGSIZE*10],%f20
-	ldd     [%i2+FBASE+REGSIZE*11],%f22
-	ldd     [%i2+FBASE+REGSIZE*12],%f24
-	ldd     [%i2+FBASE+REGSIZE*13],%f26
-	ldd     [%i2+FBASE+REGSIZE*14],%f28
-	ldd     [%i2+FBASE+REGSIZE*15],%f30
-
-	/* load single-precision float registers */
-
-	or	%g0, 1, %l0
-.f0:
-	andcc   %i4, %l0, %g0
-	beq	.f1	
-	nop
-	ld	[%i2+FBASE+REGSIZE*16+4*0 ], %f1
-.f1:
-	sll     %l0, 1, %l0
-	andcc   %i4, %l0, %g0
-	beq	.f2	
-	nop
-	ld	[%i2+FBASE+REGSIZE*16+4*1 ], %f3
-.f2:
-	sll     %l0, 1, %l0
-	andcc   %i4, %l0, %g0
-	beq	.f3	
-	nop
-	ld	[%i2+FBASE+REGSIZE*16+4*2 ], %f5
-.f3:
-	sll     %l0, 1, %l0
-	andcc   %i4, %l0, %g0
-	beq	.f4	
-	nop
-	ld	[%i2+FBASE+REGSIZE*16+4*3 ], %f7
-.f4:
-	sll     %l0, 1, %l0
-	andcc   %i4, %l0, %g0
-	beq	.f5	
-	nop
-	ld	[%i2+FBASE+REGSIZE*16+4*4 ], %f9
-.f5:
-	sll     %l0, 1, %l0
-	andcc   %i4, %l0, %g0
-	beq	.f6	
-	nop
-	ld	[%i2+FBASE+REGSIZE*16+4*5 ], %f11
-.f6:
-	sll     %l0, 1, %l0
-	andcc   %i4, %l0, %g0
-	beq	.f7
-	nop	
-	ld	[%i2+FBASE+REGSIZE*16+4*6 ], %f13
-.f7:
-	sll     %l0, 1, %l0
-	andcc   %i4, %l0, %g0
-	beq	.f8
-	nop	
-	ld	[%i2+FBASE+REGSIZE*16+4*7 ], %f15
-.f8:
-	sll     %l0, 1, %l0
-	andcc   %i4, %l0, %g0
-	beq	.f9
-	nop	
-	ld	[%i2+FBASE+REGSIZE*16+4*8 ], %f17
-.f9:
-	sll     %l0, 1, %l0
-	andcc   %i4, %l0, %g0
-	beq	.f10
-	nop	
-	ld	[%i2+FBASE+REGSIZE*16+4*9 ], %f19
-.f10:
-	sll     %l0, 1, %l0
-	andcc   %i4, %l0, %g0
-	beq	.f11
-	nop	
-	ld	[%i2+FBASE+REGSIZE*16+4*10], %f21
-.f11:
-	sll     %l0, 1, %l0
-	andcc   %i4, %l0, %g0
-	beq	.f12
-	nop	
-	ld	[%i2+FBASE+REGSIZE*16+4*11], %f23
-.f12:
-	sll     %l0, 1, %l0
-	andcc   %i4, %l0, %g0
-	beq	.f13
-	nop	
-	ld	[%i2+FBASE+REGSIZE*16+4*12], %f25
-.f13:
-	sll     %l0, 1, %l0
-	andcc   %i4, %l0, %g0
-	beq	.f14
-	nop	
-	ld	[%i2+FBASE+REGSIZE*16+4*13], %f27
-.f14:
-	sll     %l0, 1, %l0
-	andcc   %i4, %l0, %g0
-	beq	.f15
-	nop	
-	ld	[%i2+FBASE+REGSIZE*16+4*14], %f29
-.f15:
-	sll     %l0, 1, %l0
-	andcc   %i4, %l0, %g0
-	beq	.f_end
-	nop	
-	ld	[%i2+FBASE+REGSIZE*16+4*15], %f31
-.f_end:
-        /* Skip Register Data, do we nee to copy on stack at all? */
-	sub	%i1,  DHEAD, %i1   		/* skip data header. */
-	cmp     %i1, 0
-    ble	.do_call
-    nop
-
-	/* Copy loop: */
-	add     %i2,  DHEAD, %i2		/* i2 = skip data header. */
-	or	%g0, %g0, %l0			/* l0 = offset initialized to 0. */
-	add     %sp,  BIAS+SHEAD, %l2		/* l2 = argument area on stack space (7th word). (64+4+6*4 = byte offset 92). */
-
-.next:
-	ldx     [%i2+%l0],%l1			/* Read from arg buffer(%i2) to %l1. */
-	stx     %l1, [%l2+%l0]			/* Write %l1 to stack space(%l2). */
-	add     %l0, REGSIZE, %l0		/* Increment offset. */
-	sub     %i1, REGSIZE, %i1		/* Decrement copy size. */
-	cmp     %i1, 0
-	bgt     .next
-	nop
-.do_call:
-	call	%i0				/* Call target. */
-    	nop
-	or	%o0, %g0, %i0
-	jmpl	%i7 + 8, %g0
-    	restore
-/*
-	return  %i7 + 8
-	jmpl %i7 + 8, %g0
-        nop
-
-	jmpl %i7 + 8, %g0
-    nop
-    restore
-	ret
-*/
-
-/* 
-    or     %o0, %g0, %i0
-    or     %o1, %g0, %i1
-    or     %o2, %g0, %i2
-    or     %o3, %g0, %i3
-	return  %i7 + 8
-    nop
-
-Changes from v8:
-- fundamental data types
-	- (un)signed int: 8,16,32,64
-	- float: 32,64,128
-- float: IEEE 754 compilant
-	32 32-bit  float registers f0,f1,..,f31
-	32 64-bit  float registers f0,f2,..,f62
-	16 128-bit float registers f0,f4,..,f60
-
-Description:
-We need to raise up a dynamic stack frame.
-Therefore we need to compute the stack size. We do this first, 
-in the context of the caller as a leaf function (using o3 as scratch for addition).
-Then we raise the frame, ending up in o0-o3 is then i0-i3.
-
-
-Stack Layout:
-     BIAS = 2047
-
-   BIAS+XX: should be 16 byte aligned.
-                 ...
-       136: argument overflow area
-       128:  1 extended word  for struct/union poiner return value
-   BIAS+ 0: 16 extended words for registers (in/local) save area [register window]
-
-
-Function Argument Passing:
-- integer %o0..%o5 (caller view).
-- floating-point %f0 .. %f15
-- continuous memory starting at %sp+BIAS+136 (caller view).
-
-Register Usage:
-%fp0..%fp31  : floating-point arguments.
-%sp  or  %o6 : stack pointer, always 8 (or 16?)-byte aligned.
-%fp  or  %i6 : frame pointer.
-%i0  and %o0 : integer and pointer return values.
-%i7  and %o7 : return address. (caller puts return address to %o7, callee uses %i7)
-%fp0 and %fp1: return value (float).
-%i0..%i5     : input argument registers 
-%o0..%o5     : output argument registers
-%g0          : always zero, writes to it have no effect.
-
-Register Mappings:
-r0-7    -> globals
-r8-15   -> outs
-r16-r23 -> locals
-r24-r31 -> ins
-
-Integer Register Overview Table:
-ID      Class   Name    Description
-------------------------------------------------------------------------------
-0	globals	g0	always zero, writes to it have no effect
-1		g1
-2		g2
-3		g3
-4		g4
-5		g5
-6		g6
-7		g7
-8	out	o0	[int/ptr] arg 0 and return
-9		o1	          arg 1
-10		o2	          arg 2
-11		o3	          arg 3
-12              o4                arg 4
-13              o5                arg 5
-14              o6	stack pointer
-15		o7
-16	local	l0	scratch
-17		l1
-18		l2
-19		l3
-20		l4
-21		l5
-22		l6
-23		l7
-24	in	i0	[int/pt] arg 0 and return
-25		i1
-26		i2
-27		i3
-28		i4
-29		i5
-30		i6	frame pointer
-31		i7
-*/
-
--- a/dyncall/dyncall_call_sparc64.h	Thu Feb 09 16:04:51 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-/*
-
- Package: dyncall
- Library: dyncall
- File: dyncall/dyncall_call_sparc64.h
- Description: 
- License:
-
-   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
-
-   Permission to use, copy, modify, and distribute this software for any
-   purpose with or without fee is hereby granted, provided that the above
-   copyright notice and this permission notice appear in all copies.
-
-   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-*/
-
-
-
-#ifndef DYNCALL_CALL_SPARC64_H
-#define DYNCALL_CALL_SPARC64_H
-
-#include "dyncall_types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void dcCall_sparc64 (DCpointer target, DCsize size, DCpointer data);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* DYNCALL_CALL_SPARC64_H */
-
--- a/dyncall/dyncall_callvm_sparc64.c	Thu Feb 09 16:04:51 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,240 +0,0 @@
-/*
-
- Package: dyncall
- Library: dyncall
- File: dyncall/dyncall_callvm_sparc64.c
- Description: Call VM for sparc64 64-bit processor architecture.
- License:
-
-   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
-
-   Permission to use, copy, modify, and distribute this software for any
-   purpose with or without fee is hereby granted, provided that the above
-   copyright notice and this permission notice appear in all copies.
-
-   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-*/
-
-
-
-#include "dyncall_callvm_sparc64.h"
-#include "dyncall_call_sparc64.h"
-#include "dyncall_alloc.h"
-
-#define IREGS 6
-#define FREGS 16
-#define SREGS 16
-#define DHEAD (IREGS+FREGS)*8+SREGS*4
-
-/* Reset argument buffer. */
-static void dc_callvm_reset_sparc64(DCCallVM* in_self)
-{
-  DCCallVM_sparc64* self = (DCCallVM_sparc64*)in_self;
-  dcVecResize(&self->mVecHead, DHEAD);
-  self->mIntRegs        = 0;
-  self->mFloatRegs      = 0;
-  self->mUseSingleFlags = 0;
-}
-
-
-/* Destructor. */
-static void dc_callvm_free_sparc64(DCCallVM* in_self)
-{
-  dcFreeMem(in_self);
-}
-
-/* all integers are promoted to 64-bit. */
-
-static void dc_callvm_argLongLong_sparc64(DCCallVM* in_self, DClonglong x)
-{
-  DCCallVM_sparc64* self = (DCCallVM_sparc64*)in_self;
-  if (self->mIntRegs < IREGS) {
-    * ( (DClonglong*) ( dcVecAt(&self->mVecHead, (self->mIntRegs++)*8) ) ) = x;
-  } else {
-    dcVecAppend(&self->mVecHead, &x, sizeof(DClonglong));
-  }
-  if (self->mFloatRegs < FREGS) self->mFloatRegs++;
-}
-
-static void dc_callvm_argLong_sparc64   (DCCallVM* in_self, DClong    x) { dc_callvm_argLongLong_sparc64(in_self, (DClonglong) x ); }
-static void dc_callvm_argInt_sparc64    (DCCallVM* in_self, DCint     x) { dc_callvm_argLongLong_sparc64(in_self, (DClonglong) x ); }
-static void dc_callvm_argBool_sparc64   (DCCallVM* in_self, DCbool    x) { dc_callvm_argLongLong_sparc64(in_self, (DClonglong) x ); }
-static void dc_callvm_argChar_sparc64   (DCCallVM* in_self, DCchar    x) { dc_callvm_argLongLong_sparc64(in_self, (DClonglong) x ); }
-static void dc_callvm_argShort_sparc64  (DCCallVM* in_self, DCshort   x) { dc_callvm_argLongLong_sparc64(in_self, (DClonglong) x ); }
-static void dc_callvm_argPointer_sparc64(DCCallVM* in_self, DCpointer x) { dc_callvm_argLongLong_sparc64(in_self, (DClonglong) x ); }
-
-static void dc_callvm_argDouble_sparc64(DCCallVM* in_self, DCdouble x)
-{
-  DCCallVM_sparc64* self = (DCCallVM_sparc64*)in_self;
-  if (self->mFloatRegs < FREGS) {
-    * ((double*)dcVecAt(&self->mVecHead,(IREGS+(self->mFloatRegs++))*8)) = x;
-  }
-  if (self->mIntRegs < IREGS) {
-    self->mIntRegs++;
-  } else {
-    dcVecAppend(&self->mVecHead, &x, sizeof(DCdouble));
-  }
-}
-
-static void dc_callvm_argDouble_sparc64_ellipsis(DCCallVM* in_self, DCdouble x)
-{
-  union {
-    long long l;
-    double d;
-  } u;
-  u.d = x;
-  dc_callvm_argLongLong_sparc64(in_self, u.l);
-}
-
-static void dc_callvm_argFloat_sparc64_ellipsis(DCCallVM* in_self, DCfloat x)
-{
-  dc_callvm_argDouble_sparc64_ellipsis(in_self, (DCdouble) x);
-}
-
-static void dc_callvm_argFloat_sparc64(DCCallVM* in_self, DCfloat x)
-{
-  DCCallVM_sparc64* self = (DCCallVM_sparc64*)in_self;
-  if (self->mFloatRegs < FREGS) {
-    self->mUseSingleFlags |= 1<<self->mFloatRegs;
-    * ((float*)dcVecAt(&self->mVecHead,(IREGS+FREGS)*8 + (self->mFloatRegs++)*4)) = x;
-  } 
-  
-  if (self->mIntRegs < IREGS) {
-    self->mIntRegs++;
-  } else {
-    union {
-      DCdouble d;
-      DClonglong l;
-      DCfloat f[2];
-    } u;
-    u.f[1] = x;
-    dcVecAppend(&self->mVecHead, &u.l, sizeof(DClonglong));
-  }
-}
-
-#if 0
-/* call: delegate to default call kernel */
-static void dc_callvm_call_sparc64(DCCallVM* in_self, DCpointer target)
-{
-  DCCallVM_sparc64* self = (DCCallVM_sparc64*)in_self;
-  dcCall_sparc64(target, dcVecSize(&self->mVecHead), dcVecData(&self->mVecHead));
-}
-#endif
-
-#if 0
-/* Load integer 32-bit. */
-static void dc_callvm_argInt_sparc64(DCCallVM* in_self, DCint x)
-{
-  DCCallVM_sparc64* self = (DCCallVM_sparc64*)in_self;
-  dcVecAppend(&self->mVecHead, &x, sizeof(DCint));
-}
-
-/* we propagate Bool,Char,Short,Int to LongLong. */
-
-static void dc_callvm_argBool_sparc64(DCCallVM* in_self, DCbool x)   { dc_callvm_argInt_sparc64(in_self, (DCint)x); }
-static void dc_callvm_argChar_sparc64(DCCallVM* in_self, DCchar x)   { dc_callvm_argInt_sparc64(in_self, (DCint)x); }
-static void dc_callvm_argShort_sparc64(DCCallVM* in_self, DCshort x) { dc_callvm_argInt_sparc64(in_self, (DCint)x); }
-#endif
-
-static void dc_callvm_mode_sparc64(DCCallVM* in_self, DCint mode);
-
-DCCallVM_vt gVT_sparc64_ellipsis = 
-{
-  &dc_callvm_free_sparc64, 
-  &dc_callvm_reset_sparc64, 
-  &dc_callvm_mode_sparc64, 
-  &dc_callvm_argBool_sparc64, 
-  &dc_callvm_argChar_sparc64, 
-  &dc_callvm_argShort_sparc64, 
-  &dc_callvm_argInt_sparc64, 
-  &dc_callvm_argLong_sparc64, 
-  &dc_callvm_argLongLong_sparc64, 
-  &dc_callvm_argFloat_sparc64_ellipsis, 
-  &dc_callvm_argDouble_sparc64_ellipsis, 
-  &dc_callvm_argPointer_sparc64, 
-  NULL /* argStruct */, 
-  (DCvoidvmfunc*)       &dcCall_sparc64, 
-  (DCboolvmfunc*)       &dcCall_sparc64, 
-  (DCcharvmfunc*)       &dcCall_sparc64, 
-  (DCshortvmfunc*)      &dcCall_sparc64, 
-  (DCintvmfunc*)        &dcCall_sparc64, 
-  (DClongvmfunc*)       &dcCall_sparc64, 
-  (DClonglongvmfunc*)   &dcCall_sparc64, 
-  (DCfloatvmfunc*)      &dcCall_sparc64, 
-  (DCdoublevmfunc*)     &dcCall_sparc64, 
-  (DCpointervmfunc*)    &dcCall_sparc64, 
-  NULL /* callStruct */
-};
-
-/* CallVM virtual table. */
-DCCallVM_vt gVT_sparc64 =
-{
-  &dc_callvm_free_sparc64, 
-  &dc_callvm_reset_sparc64, 
-  &dc_callvm_mode_sparc64, 
-  &dc_callvm_argBool_sparc64, 
-  &dc_callvm_argChar_sparc64, 
-  &dc_callvm_argShort_sparc64, 
-  &dc_callvm_argInt_sparc64, 
-  &dc_callvm_argLong_sparc64, 
-  &dc_callvm_argLongLong_sparc64, 
-  &dc_callvm_argFloat_sparc64, 
-  &dc_callvm_argDouble_sparc64, 
-  &dc_callvm_argPointer_sparc64, 
-  NULL /* argStruct */, 
-  (DCvoidvmfunc*)       &dcCall_sparc64, 
-  (DCboolvmfunc*)       &dcCall_sparc64, 
-  (DCcharvmfunc*)       &dcCall_sparc64, 
-  (DCshortvmfunc*)      &dcCall_sparc64, 
-  (DCintvmfunc*)        &dcCall_sparc64, 
-  (DClongvmfunc*)       &dcCall_sparc64, 
-  (DClonglongvmfunc*)   &dcCall_sparc64, 
-  (DCfloatvmfunc*)      &dcCall_sparc64, 
-  (DCdoublevmfunc*)     &dcCall_sparc64, 
-  (DCpointervmfunc*)    &dcCall_sparc64, 
-  NULL /* callStruct */
-};
-
-/* mode: only a single mode available currently. */
-static void dc_callvm_mode_sparc64(DCCallVM* in_self, DCint mode)
-{
-  DCCallVM_sparc64* self = (DCCallVM_sparc64*)in_self;
-  DCCallVM_vt* vt;
-
-  switch(mode) {
-    case DC_CALL_C_DEFAULT:
-    case DC_CALL_C_SPARC64:
-    case DC_CALL_C_ELLIPSIS:
-      vt = &gVT_sparc64;
-      break;
-    case DC_CALL_C_ELLIPSIS_VARARGS:
-      vt = &gVT_sparc64_ellipsis;
-      break;
-    default:
-      self->mInterface.mError = DC_ERROR_UNSUPPORTED_MODE; 
-      return;
-  }
-  dc_callvm_base_init(&self->mInterface, vt);
-}
-
-/* Public API. */
-DCCallVM* dcNewCallVM(DCsize size)
-{
-  /* output registers %o0-%o5 are always loaded, thus we need to ensure the argument buffer has space for at least DHEAD bytes. */
-  DCCallVM_sparc64* p = (DCCallVM_sparc64*)dcAllocMem(sizeof(DCCallVM_sparc64)+DHEAD+size);
-
-  dc_callvm_mode_sparc64((DCCallVM*)p, DC_CALL_C_DEFAULT);
-
-  dcVecInit(&p->mVecHead,DHEAD+size);
-  dc_callvm_reset_sparc64(&p->mInterface);
-
-  return (DCCallVM*)p;
-}
-
--- a/dyncall/dyncall_callvm_sparc64.h	Thu Feb 09 16:04:51 2017 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-/*
-
- Package: dyncall
- Library: dyncall
- File: dyncall/dyncall_callvm_sparc64.h
- Description: Call VM for sparc64 processor architecture.
- License:
-
-   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
-
-   Permission to use, copy, modify, and distribute this software for any
-   purpose with or without fee is hereby granted, provided that the above
-   copyright notice and this permission notice appear in all copies.
-
-   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-*/
-
-
-
-#ifndef DYNCALL_CALLVM_SPARC_H
-#define DYNCALL_CALLVM_SPARC_H
-
-#include "dyncall_callvm.h"
-#include "dyncall_vector.h"
-
-typedef struct DCCallVM_sparc64_ DCCallVM_sparc64;
-struct DCCallVM_sparc64_
-{
-  DCCallVM     mInterface;	/* 12:8 -> 16 */
-  int          mIntRegs;	/* 16 */
-  int          mFloatRegs;      /* 20 */
-  unsigned int mUseSingleFlags; /* 24 */
-  DCVecHead    mVecHead;        /* 36:16, 28 => 40 */
-};
-
-#endif /* DYNCALL_CALLVM_SPARC64_H */
-