#include "md-abi.h"
#include "vm/jit/powerpc64/codegen.h"
+#include "vm/jit/powerpc64/md.h"
#include "vm/exceptions.h"
#include "vm/global.h"
-#include "vm/jit/asmpart.h"
-#include "vm/jit/codegen-common.h"
#include "vm/jit/jit.h"
-#include "vm/jit/md.h"
/* md_init *********************************************************************
}
-/* md_stacktrace_get_returnaddress *********************************************
-
- Returns the return address of the current stackframe, specified by
- the passed stack pointer and the stack frame size.
-
-*******************************************************************************/
-
-u1 *md_stacktrace_get_returnaddress(u1 *sp, u4 framesize)
-{
- u1 *ra;
-
- /* on PowerPC the return address is located in the linkage area */
-
- ra = *((u1 **) (sp + framesize + LA_LR_OFFSET));
-
- return ra;
-}
-
-
/* md_jit_method_patch_address *************************************************
Gets the patch address of the currently compiled method. The offset
}
-/* md_codegen_get_pv_from_pc ***************************************************
-
- Machine code:
-
- 7d6802a6 mflr r11
- 39cbffe0 addi r14,r11,-32
-
- or
-
- 7d6802a6 mflr r11
- 3dcbffff addis r14,r11,-1
- 39ce68b0 addi r14,r13,26800
-
-*******************************************************************************/
-
-u1 *md_codegen_get_pv_from_pc(u1 *ra)
-{
- u1 *pv;
- u4 mcode;
- s4 offset;
-
- /* get first instruction word after jump */
-
- mcode = *((u4 *) (ra + 1 * 4));
-
- /* check if we have 2 instructions (addis, addi) */
-
- if ((mcode >> 16) == 0x3dcb) {
- /* get displacement of first instruction (addis) */
-
- offset = (s4) (mcode << 16);
-
- /* get displacement of second instruction (addi) */
-
- mcode = *((u4 *) (ra + 2 * 4));
-
- /* check for addi instruction */
-
- assert((mcode >> 16) == 0x39ce);
-
- offset += (s2) (mcode & 0x0000ffff);
- }
- else if ((mcode >> 16) == 0x39cb) {
- /* get offset of first instruction (addi) */
-
- offset = (s2) (mcode & 0x0000ffff);
- }
- else {
- vm_abort("md_codegen_get_pv_from_pc: unknown instruction %x", mcode);
-
- /* keep compiler happy */
-
- offset = 0;
- }
-
- /* calculate PV via RA + offset */
-
- pv = ra + offset;
-
- return pv;
-}
-
-
-/* md_cacheflush ***************************************************************
-
- Calls the system's function to flush the instruction and data
- cache.
-
-*******************************************************************************/
-
-void md_cacheflush(u1 *addr, s4 nbytes)
-{
- asm_cacheflush(addr, nbytes);
-}
-
-
-/* md_icacheflush **************************************************************
-
- Calls the system's function to flush the instruction cache.
-
-*******************************************************************************/
-
-void md_icacheflush(u1 *addr, s4 nbytes)
-{
- asm_cacheflush(addr, nbytes);
-}
-
-
-/* md_dcacheflush **************************************************************
-
- Calls the system's function to flush the data cache.
-
-*******************************************************************************/
-
-void md_dcacheflush(u1 *addr, s4 nbytes)
-{
- asm_cacheflush(addr, nbytes);
-}
-
-
/* md_patch_replacement_point **************************************************
Patch the given replacement point.
}
#endif /* defined(ENABLE_REPLACEMENT) */
+
/*
* These are local overrides for various environment variables in Emacs.
* Please do not remove this and leave it at the end of the file, where