⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sysdepcallmethod.h

📁 kaffe Java 解释器语言,源码,Java的子集系统,开放源代码
💻 H
字号:
/* * superh/sysdepCallMethod.h * Common sysdepCallMethod for Super-H. * * Copyright (c) 2001 *	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.  */#ifndef __superh_sysdepCallMethod_h#define __superh_sysdepCallMethod_h#include "support.h"static inline void sysdepCallMethod(callMethodInfo *call){  int extraargs[((call)->nrargs>4)?((call)->nrargs-4):0];  switch((call)->nrargs) {    register int r0 asm("r4");    register int r1 asm("r5");    register int r2 asm("r6");    register int r3 asm("r7");  default:    {      int *args = extraargs;      int argidx = 4;      if ((call)->callsize[3] == 2) args++;      for(; argidx < (call)->nrargs; ++argidx) {	if ((call)->callsize[argidx]) {	  *args++ = (call)->args[argidx].i;	  if ((call)->callsize[argidx] == 2)	    *args++ = ((call)->args[argidx].j) >> 32;	}      }    }  case 4:    if ((call)->callsize[3]) {      r3 = (call)->args[3].i;      if ((call)->callsize[3] == 2)        *extraargs = ((call)->args[3].j) >> 32;    }  case 3:    if ((call)->callsize[2]) {      r2 = (call)->args[2].i;      if ((call)->callsize[2] == 2)        r3 = ((call)->args[2].j) >> 32;    }  case 2:    if ((call)->callsize[1]) {      r1 = (call)->args[1].i;      if ((call)->callsize[1] == 2)        r2 = ((call)->args[1].j) >> 32;    }  case 1:    if ((call)->callsize[0]) {      r0 = (call)->args[0].i;      if ((call)->callsize[0] == 2)        r1 = ((call)->args[0].j) >> 32;    }  case 0:    asm volatile ("jsr @%2 ; nop ; mov r0,r4 ; mov r1,r5\n"        : "=r" (r0), "=r" (r1)	: "r" ((call)->function),	  "0" (r0), "1" (r1), "r" (r2), "r" (r3)	: "r14"	);    switch((call)->rettype) {    case 'D':    case 'J':        (&(call)->ret->i)[1] = r1;        /* follow through */    default:        (call)->ret->i = r0;    }    break;  }}#endif /* __superh_sysdepCallMethod_h */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -