diff options
| author | kr.angelov <kr.angelov@gmail.com> | 2013-08-01 12:07:06 +0000 |
|---|---|---|
| committer | kr.angelov <kr.angelov@gmail.com> | 2013-08-01 12:07:06 +0000 |
| commit | 8dc7d6c09451adba33fa1f38f2417a17d953796e (patch) | |
| tree | 3dcde852f87f431d09893e6f9ac06644b9f34950 /src/runtime/c/pgf/lightning/arm/funcs.h | |
| parent | bf04d9fce77e84133c9e89936cfd1e4c514f71e8 (diff) | |
added untested port of GNU lightning to ARM
Diffstat (limited to 'src/runtime/c/pgf/lightning/arm/funcs.h')
| -rw-r--r-- | src/runtime/c/pgf/lightning/arm/funcs.h | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/src/runtime/c/pgf/lightning/arm/funcs.h b/src/runtime/c/pgf/lightning/arm/funcs.h new file mode 100644 index 000000000..ec19e52a3 --- /dev/null +++ b/src/runtime/c/pgf/lightning/arm/funcs.h @@ -0,0 +1,109 @@ +/******************************** -*- C -*- **************************** + * + * Run-time assembler for the arm + * + ***********************************************************************/ + +/*********************************************************************** + * + * Copyright 2011 Free Software Foundation + * + * This file is part of GNU lightning. + * + * GNU lightning is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU lightning is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with GNU lightning; see the file COPYING.LESSER; if not, write to the + * Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + * + * Authors: + * Paulo Cesar Pereira de Andrade + ***********************************************************************/ + +#ifndef __lightning_funcs_h +#define __lightning_funcs_h + +#if defined(__linux__) +# include <stdio.h> +# include <string.h> +#endif + +#include <stdlib.h> +#include <unistd.h> +#include <sys/mman.h> + +extern void __clear_cache(void*, void*); + +static void +jit_flush_code(void *start, void *end) +{ + mprotect(start, (char *)end - (char *)start, + PROT_READ | PROT_WRITE | PROT_EXEC); + __clear_cache(start, end); +} + +#define jit_get_cpu jit_get_cpu +__jit_constructor static void +jit_get_cpu(void) +{ +#if defined(__linux__) + FILE *fp; + char *ptr; + char buf[128]; + static int initialized; + + if (initialized) + return; + initialized = 1; + if ((fp = fopen("/proc/cpuinfo", "r")) == NULL) + return; + + while (fgets(buf, sizeof(buf), fp)) { + if (strncmp(buf, "CPU architecture:", 17) == 0) { + jit_cpu.version = strtol(buf + 17, &ptr, 10); + while (*ptr) { + if (*ptr == 'T' || *ptr == 't') { + ++ptr; + jit_cpu.thumb = 1; + } + else if (*ptr == 'E' || *ptr == 'e') { + jit_cpu.extend = 1; + ++ptr; + } + else + ++ptr; + } + } + else if (strncmp(buf, "Features\t:", 10) == 0) { + if ((ptr = strstr(buf + 10, "vfpv"))) + jit_cpu.vfp = strtol(ptr + 4, NULL, 0); + if ((ptr = strstr(buf + 10, "neon"))) + jit_cpu.neon = 1; + if ((ptr = strstr(buf + 10, "thumb"))) + jit_cpu.thumb = 1; + } + } + fclose(fp); +#endif +#if defined(__ARM_PCS_VFP) + if (!jit_cpu.vfp) + jit_cpu.vfp = 3; + if (!jit_cpu.version) + jit_cpu.version = 7; + jit_cpu.abi = 1; +#endif + /* armv6t2 todo (software float and thumb2) */ + if (!jit_cpu.vfp && jit_cpu.thumb) + jit_cpu.thumb = 0; +} + +#endif /* __lightning_funcs_h */ |
