diff options
Diffstat (limited to 'erts/emulator/hipe/hipe_sparc.h')
-rw-r--r-- | erts/emulator/hipe/hipe_sparc.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/erts/emulator/hipe/hipe_sparc.h b/erts/emulator/hipe/hipe_sparc.h new file mode 100644 index 0000000000..53cb18ee45 --- /dev/null +++ b/erts/emulator/hipe/hipe_sparc.h @@ -0,0 +1,54 @@ +/* + * %CopyrightBegin% + * + * Copyright Ericsson AB 2003-2009. All Rights Reserved. + * + * The contents of this file are subject to the Erlang Public License, + * Version 1.1, (the "License"); you may not use this file except in + * compliance with the License. You should have received a copy of the + * Erlang Public License along with this software. If not, it can be + * retrieved online at http://www.erlang.org/. + * + * Software distributed under the License is distributed on an "AS IS" + * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + * the License for the specific language governing rights and limitations + * under the License. + * + * %CopyrightEnd% + */ +/* $Id$ + */ +#ifndef HIPE_SPARC_H +#define HIPE_SPARC_H + +static __inline__ void hipe_flush_icache_word(void *address) +{ + asm volatile("flush %0" + : /* no outputs */ + : "r"(address) + : "memory"); +} + +extern void hipe_flush_icache_range(void *address, unsigned int nbytes); + +/* for stack descriptor hash lookup */ +#define HIPE_RA_LSR_COUNT 2 /* low 2 bits are always zero */ + +/* for hipe_bifs_{read,write}_{s,u}32 */ +static __inline__ int hipe_word32_address_ok(void *address) +{ + return ((unsigned long)address & 0x3) == 0; +} + +/* Native stack growth direction. */ +#define HIPE_NSTACK_GROWS_DOWN + +#define hipe_arch_name am_ultrasparc + +extern void hipe_sparc_inc_stack(void); + +/* for hipe_bifs_enter_code_2 */ +extern void *hipe_alloc_code(Uint nrbytes, Eterm callees, Eterm *trampolines, Process *p); +#define HIPE_ALLOC_CODE(n,c,t,p) hipe_alloc_code((n),(c),(t),(p)) + +#endif /* HIPE_SPARC_H */ |