mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-05 06:50:21 +02:00
* lib/jit_aarch64-sz.c, lib/jit_arm-sz.c, lib/jit_hppa-sz.c, lib/jit_ia64-sz.c, lib/jit_mips-sz.c, lib/jit_ppc-sz.c, lib/jit_s390x-sz.c, lib/jit_size.c, lib/jit_sparc-sz.c, lib/jit_x86-sz.c: New files implementing static tables with longest known instructions length generated to match a lightning instruction. These tables should make it easier to make it very unlikely to ever miscalculate, or by too much, the size of a code buffer. * lib/jit_size.c: New file that aids to either collect jit code size information, or use the information depending on build options. * size.c: New helper file that parses input for, and create an initial jit_$arch-sz.c file, that needs some minor edit for arches with multiple configurations. * configure.ac, Makefile.am: Add the new, devel mode only --enable-devel-get-jit-size configure option, that sets compile time flags to collect jit code size information, that will be used as input for the "noinst size program". * lib/jit_aarch64.c, lib/jit_arm.c, lib/jit_disasm.c, lib/jit_hppa.c, lib/jit_ia64.c, lib/jit_memory.c, lib/jit_mips.c, lib/jit_ppc.c, lib/jit_s390x.c, lib/jit_sparc.c, lib/jit_x86.c, lib/lightning.c: Minor changes for the --enable-devel-get-jit-size build mode, as well as the "production build mode" with jit code size information.
84 lines
2.3 KiB
C
84 lines
2.3 KiB
C
/*
|
|
* Copyright (C) 2013 Free Software Foundation, Inc.
|
|
*
|
|
* 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.
|
|
*
|
|
* Authors:
|
|
* Paulo Cesar Pereira de Andrade
|
|
*/
|
|
|
|
#include <lightning.h>
|
|
#include <lightning/jit_private.h>
|
|
#include <stdio.h>
|
|
|
|
jit_int16_t _szs[jit_code_x86_retval_d + 1];
|
|
|
|
int
|
|
main(int argc, char *argv[])
|
|
{
|
|
FILE *fp;
|
|
jit_word_t offset;
|
|
int code, size, max;
|
|
|
|
if ((fp = fopen(JIT_SIZE_PATH, "r")) == NULL)
|
|
exit(-1);
|
|
while (fscanf(fp, "%d %d\n", &code, &size) == 2) {
|
|
if (_szs[code] < size)
|
|
_szs[code] = size;
|
|
}
|
|
fclose(fp);
|
|
|
|
max = 0;
|
|
for (offset = 0; offset <= jit_code_x86_retval_d; offset++)
|
|
if (max < _szs[offset])
|
|
max = _szs[offset];
|
|
|
|
if ((fp = fopen(JIT_SIZE_PATH, "w")) == NULL)
|
|
exit(-1);
|
|
|
|
|
|
fprintf(fp, "#if __WORDSIZE == %d\n", __WORDSIZE);
|
|
#if defined(__arm__)
|
|
# if defined(__ARM_PCS_VFP)
|
|
fprintf(fp, "#if defined(__ARM_PCS_VFP)\n");
|
|
# else
|
|
fprintf(fp, "#if !defined(__ARM_PCS_VFP)\n");
|
|
# endif
|
|
#elif defined(__mips__)
|
|
# if defined(_ABIN32)
|
|
fprintf(fp, "#if defined(_ABIN32)\n");
|
|
# else
|
|
fprintf(fp, "#if !defined(_ABIN32)\n");
|
|
# endif
|
|
#elif defined(__ppc__)
|
|
fprintf(fp, "#if defined(__ppc__)\n");
|
|
#elif defined(__powerpc__)
|
|
fprintf(fp, "#if defined(__powerpc__)\n");
|
|
#endif
|
|
fprintf(fp, "#define JIT_INSTR_MAX %d\n", max);
|
|
for (offset = 0; offset <= jit_code_x86_retval_d; offset++)
|
|
fprintf(fp, " %d,\n", _szs[offset]);
|
|
#if defined(__arm__)
|
|
fprintf(fp, "#undef /* __ARM_PCS_VFP */\n");
|
|
#elif defined(__mips__)
|
|
fprintf(fp, "#endif /* _ABIN32 */\n");
|
|
#elif defined(__ppc__)
|
|
fprintf(fp, "#endif /* __ppc__ */\n");
|
|
#elif defined(__powerpc__)
|
|
fprintf(fp, "#endif /* __powerpc__ */\n");
|
|
#endif
|
|
fprintf(fp, "#endif /* __WORDSIZE */\n");
|
|
fclose(fp);
|
|
|
|
return (0);
|
|
}
|