argument passing.
* src/vm/jit/alpha/md-abi.c (md_param_alloc): Set pd->index.
* src/native/jni.c: Added __ALPHA__ ifdef.
* src/vm/vm.c: Likewise.
* src/vm/vm.h: Likewise.
* src/vm/jit/asmpart.h: Likewise.
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: jni.c 8170 2007-06-30 14:03:18Z twisti $
+ $Id: jni.c 8198 2007-07-12 07:16:24Z twisti $
*/
*******************************************************************************/
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) \
- && !defined(__M68K__) && !defined(__ARM__) && !defined(__SPARC_64__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__) && !defined(__ALPHA__)
java_objectheader *_Jv_jni_invokeNative(methodinfo *m, java_objectheader *o,
java_objectarray *params)
{
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: asmpart.S 8186 2007-07-05 23:48:16Z michi $
+ $Id: asmpart.S 8198 2007-07-12 07:16:24Z twisti $
*/
asm_vm_call_method_float:
asm_vm_call_method_double:
ldgp gp,0(pv)
- lda sp,-5*8(sp) /* allocate stack space */
- stq ra,0*8(sp) /* save return address */
- stq gp,1*8(sp) /* save global pointer */
- stq s6,3*8(sp)
-
- stq a0,4*8(sp) /* save method pointer for compiler */
-
- mov a2,t0 /* pointer to arg block */
- mov a1,s6 /* arg count */
-
- ble s6,calljava_argsloaded
- lda s6,-1(s6)
- ldq a0,offvmargdata(t0)
- ldt $f16,offvmargdata(t0)
- ble s6,calljava_argsloaded
-
- lda s6,-1(s6)
- ldq a1,offvmargdata+sizevmarg*1(t0)
- ldt $f17,offvmargdata+sizevmarg*1(t0)
- ble s6,calljava_argsloaded
-
- lda s6,-1(s6)
- ldq a2,offvmargdata+sizevmarg*2(t0)
- ldt $f18,offvmargdata+sizevmarg*2(t0)
- ble s6,calljava_argsloaded
-
- lda s6,-1(s6)
- ldq a3,offvmargdata+sizevmarg*3(t0)
- ldt $f19,offvmargdata+sizevmarg*3(t0)
- ble s6,calljava_argsloaded
-
- lda s6,-1(s6)
- ldq a4,offvmargdata+sizevmarg*4(t0)
- ldt $f20,offvmargdata+sizevmarg*4(t0)
- ble s6,calljava_argsloaded
-
- lda s6,-1(s6)
- ldq a5,offvmargdata+sizevmarg*5(t0)
- ldt $f21,offvmargdata+sizevmarg*5(t0)
-calljava_argsloaded:
- mov sp,t4
- ble s6,calljava_nocopy
- negq s6,t1
- s8addq t1,sp,sp
- s8addq t1,t4,t2
-
-calljava_copyloop:
- ldq t3,offvmargdata+sizevmarg*6(t0)
- stq t3,0(t2)
- lda t1,1(t1)
- lda t0,sizevmarg(t0)
- lda t2,8(t2)
- bne t1,calljava_copyloop
-
-calljava_nocopy:
- ldq itmp1,4*8(t4) /* pass method pointer via itmp1 */
-
- lda mptr,asm_call_jit_compiler/* fake virtual function call (2 instr) */
- stq mptr,2*8(t4) /* store function address */
- lda mptr,1*8(t4) /* set method pointer */
-
- ldq pv,1*8(mptr) /* method call as in Java */
- jmp ra,(pv) /* call JIT compiler */
-calljava_jit2:
- lda pv,(asm_vm_call_method - calljava_jit2)(ra)
-
- s8addq s6,sp,sp
-calljava_return2:
- ldq ra,0*8(sp) /* restore return address */
- ldq gp,1*8(sp) /* restore global pointer */
- ldq s6,3*8(sp)
- lda sp,5*8(sp) /* free stack space */
-
-calljava_ret2:
+ lda sp,-5*8(sp) /* allocate stack space */
+ stq ra,0*8(sp) /* save return address */
+ stq gp,1*8(sp) /* save global pointer */
+
+ stq s0,3*8(sp)
+ stq a0,4*8(sp) /* save method PV */
+
+ mov a1,t0 /* address of argument array */
+ mov a2,t1 /* stack argument count */
+ mov sp,s0 /* save stack pointer */
+
+ ldq a0,0*8(t0)
+ ldq a1,1*8(t0)
+ ldq a2,2*8(t0)
+ ldq a3,3*8(t0)
+ ldq a4,4*8(t0)
+ ldq a5,5*8(t0)
+
+ ldt fa0,6*8(t0)
+ ldt fa1,7*8(t0)
+ ldt fa2,8*8(t0)
+ ldt fa3,9*8(t0)
+ ldt fa4,10*8(t0)
+ ldt fa5,11*8(t0)
+
+ beq t1,L_asm_vm_call_method_stack_copy_done
+
+ negq t1,t2 /* calculate stackframe size (* 8) */
+ s8addq t2,sp,sp /* create stackframe */
+ mov sp,t2 /* temporary stack pointer */
+
+L_asm_vm_call_method_stack_copy_loop:
+ ldq t3,12*8(t0) /* load argument */
+ stq t3,0(t2) /* store argument on stack */
+
+ subq t1,1,t1 /* subtract 1 argument */
+ addq t0,8,t0 /* load address of next argument */
+ addq t2,8,t2 /* increase stack pointer */
+
+ bgt t1,L_asm_vm_call_method_stack_copy_loop
+
+L_asm_vm_call_method_stack_copy_done:
+ lda mptr,4*8(s0) /* get address of PV */
+ ldq pv,0*8(mptr) /* load PV */
+ jmp ra,(pv)
+L_asm_vm_call_method_recompute_pv:
+ lda pv,(asm_vm_call_method - L_asm_vm_call_method_recompute_pv)(ra)
+
+ mov s0,sp /* restore stack pointer */
+
+L_asm_vm_call_method_recompute_return:
+ ldq ra,0*8(sp) /* restore RA */
+ ldq gp,1*8(sp) /* restore global pointer */
+ ldq s0,3*8(sp)
+
+ lda sp,5*8(sp) /* free stack space */
jmp zero,(ra)
asm_vm_call_method_exception_handler:
- s8addq s6,sp,sp
- ldq gp,1*8(sp) /* restore global pointer */
+ mov s0,sp /* restore stack pointer */
+ ldq gp,1*8(sp) /* restore global pointer */
mov itmp1,a0
jsr ra,builtin_throw_exception
- ldq ra,0*8(sp) /* restore return address */
- ldq s6,3*8(sp)
- lda sp,5*8(sp) /* free stack space */
+
asm_vm_call_method_end:
- jmp zero,(ra)
+ br L_asm_vm_call_method_recompute_return
.end asm_vm_call_method
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: md-abi.c 8123 2007-06-20 23:50:55Z michi $
+ $Id: md-abi.c 8198 2007-07-12 07:16:24Z twisti $
*/
case TYPE_LNG:
if (i < INT_ARG_CNT) {
pd->inmemory = false;
+ pd->index = reguse;
pd->regoff = abi_registers_integer_argument[reguse];
reguse++;
md->argintreguse = reguse;
}
else {
pd->inmemory = true;
+ pd->index = stacksize;
pd->regoff = stacksize * 8;
stacksize++;
}
case TYPE_DBL:
if (i < FLT_ARG_CNT) {
pd->inmemory = false;
+ pd->index = reguse;
pd->regoff = abi_registers_float_argument[reguse];
reguse++;
md->argfltreguse = reguse;
}
else {
pd->inmemory = true;
+ pd->index = stacksize;
pd->regoff = stacksize * 8;
stacksize++;
}
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: asmpart.h 8128 2007-06-21 16:29:53Z tbfg $
+ $Id: asmpart.h 8198 2007-07-12 07:16:24Z twisti $
*/
void asm_call_jit_compiler(void);
#if defined(ENABLE_JIT)
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__) && !defined(__ALPHA__)
java_objectheader *asm_vm_call_method(methodinfo *m, s4 vmargscount,
vm_arg *vmargs);
s4 asm_vm_call_method_int(methodinfo *m, s4 vmargscount, vm_arg *vmargs);
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: vm.c 8194 2007-07-10 13:44:37Z twisti $
+ $Id: vm.c 8198 2007-07-12 07:16:24Z twisti $
*/
*******************************************************************************/
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__) && !defined(__ALPHA__)
static void vm_vmargs_from_valist(methodinfo *m, java_objectheader *o,
vm_arg *vmargs, va_list ap)
{
*******************************************************************************/
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__) && !defined(__ALPHA__)
static void vm_vmargs_from_jvalue(methodinfo *m, java_objectheader *o,
vm_arg *vmargs, const jvalue *args)
{
*******************************************************************************/
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__) && !defined(__ALPHA__)
bool vm_vmargs_from_objectarray(methodinfo *m, java_objectheader *o,
vm_arg *vmargs, java_objectarray *params)
{
java_objectheader *vm_call_method_valist(methodinfo *m, java_objectheader *o,
va_list ap)
{
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__) && !defined(__ALPHA__)
s4 vmargscount;
vm_arg *vmargs;
java_objectheader *ro;
java_objectheader *vm_call_method_jvalue(methodinfo *m, java_objectheader *o,
const jvalue *args)
{
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__) && !defined(__ALPHA__)
s4 vmargscount;
vm_arg *vmargs;
java_objectheader *ro;
*******************************************************************************/
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__) && !defined(__ALPHA__)
java_objectheader *vm_call_method_vmarg(methodinfo *m, s4 vmargscount,
vm_arg *vmargs)
{
*******************************************************************************/
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__) && !defined(__ALPHA__)
s4 vm_call_method_int_vmarg(methodinfo *m, s4 vmargscount, vm_arg *vmargs)
{
s4 i;
*******************************************************************************/
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__) && !defined(__ALPHA__)
s4 vm_call_method_int_valist(methodinfo *m, java_objectheader *o, va_list ap)
{
s4 vmargscount;
*******************************************************************************/
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__) && !defined(__ALPHA__)
s4 vm_call_method_int_jvalue(methodinfo *m, java_objectheader *o,
const jvalue *args)
{
*******************************************************************************/
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__) && !defined(__ALPHA__)
+>>>>>>> .r8173
s8 vm_call_method_long_vmarg(methodinfo *m, s4 vmargscount, vm_arg *vmargs)
{
s8 l;
*******************************************************************************/
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__) && !defined(__ALPHA__)
s8 vm_call_method_long_valist(methodinfo *m, java_objectheader *o, va_list ap)
{
s4 vmargscount;
*******************************************************************************/
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__) && !defined(__ALPHA__)
s8 vm_call_method_long_jvalue(methodinfo *m, java_objectheader *o,
const jvalue *args)
{
*******************************************************************************/
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__) && !defined(__ALPHA__)
float vm_call_method_float_vmarg(methodinfo *m, s4 vmargscount, vm_arg *vmargs)
{
float f;
*******************************************************************************/
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__) && !defined(__ALPHA__)
float vm_call_method_float_valist(methodinfo *m, java_objectheader *o,
va_list ap)
{
*******************************************************************************/
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__) && !defined(__ALPHA__)
float vm_call_method_float_jvalue(methodinfo *m, java_objectheader *o,
const jvalue *args)
{
*******************************************************************************/
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__) && !defined(__ALPHA__)
double vm_call_method_double_vmarg(methodinfo *m, s4 vmargscount,
vm_arg *vmargs)
{
*******************************************************************************/
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__) && !defined(__ALPHA__)
double vm_call_method_double_valist(methodinfo *m, java_objectheader *o,
va_list ap)
{
*******************************************************************************/
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__) && !defined(__ALPHA__)
double vm_call_method_double_jvalue(methodinfo *m, java_objectheader *o,
const jvalue *args)
{
void vm_abort(const char *text, ...);
/* Java method calling functions */
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__) && !defined(__ALPHA__)
bool vm_vmargs_from_objectarray(methodinfo *m, java_objectheader *o,
vm_arg *vmargs, java_objectarray *params);
#else
java_objectheader *vm_call_method_jvalue(methodinfo *m, java_objectheader *o,
const jvalue *args);
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__) && !defined(__ALPHA__)
java_objectheader *vm_call_method_vmarg(methodinfo *m, s4 vmargscount,
vm_arg *vmargs);
s4 vm_call_method_int_vmarg(methodinfo *m, s4 vmargscount, vm_arg *vmargs);