mirror of
https://github.com/mirror/tinycc.git
synced 2025-02-04 06:30:10 +08:00
x86-asm: move stats code
The old place (tccasm.c) didn't have access to the variables anymore and was ifdefed out. Move it to i386-asm.c.
This commit is contained in:
parent
ed35ac841b
commit
4af6e087dd
40
i386-asm.c
40
i386-asm.c
@ -504,6 +504,45 @@ static inline int asm_modrm(int reg, Operand *op)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void maybe_print_stats (void)
|
||||
{
|
||||
static int already = 1;
|
||||
if (!already)
|
||||
/* print stats about opcodes */
|
||||
{
|
||||
const struct ASMInstr *pa;
|
||||
int freq[4];
|
||||
int op_vals[500];
|
||||
int nb_op_vals, i, j;
|
||||
|
||||
already = 1;
|
||||
nb_op_vals = 0;
|
||||
memset(freq, 0, sizeof(freq));
|
||||
for(pa = asm_instrs; pa->sym != 0; pa++) {
|
||||
freq[pa->nb_ops]++;
|
||||
//for(i=0;i<pa->nb_ops;i++) {
|
||||
for(j=0;j<nb_op_vals;j++) {
|
||||
//if (pa->op_type[i] == op_vals[j])
|
||||
if (pa->instr_type == op_vals[j])
|
||||
goto found;
|
||||
}
|
||||
//op_vals[nb_op_vals++] = pa->op_type[i];
|
||||
op_vals[nb_op_vals++] = pa->instr_type;
|
||||
found: ;
|
||||
//}
|
||||
}
|
||||
for(i=0;i<nb_op_vals;i++) {
|
||||
int v = op_vals[i];
|
||||
//if ((v & (v - 1)) != 0)
|
||||
printf("%3d: %08x\n", i, v);
|
||||
}
|
||||
printf("size=%d nb=%d f0=%d f1=%d f2=%d f3=%d\n",
|
||||
(int)sizeof(asm_instrs),
|
||||
(int)sizeof(asm_instrs) / (int)sizeof(ASMInstr),
|
||||
freq[0], freq[1], freq[2], freq[3]);
|
||||
}
|
||||
}
|
||||
|
||||
ST_FUNC void asm_opcode(TCCState *s1, int opcode)
|
||||
{
|
||||
const ASMInstr *pa;
|
||||
@ -515,6 +554,7 @@ ST_FUNC void asm_opcode(TCCState *s1, int opcode)
|
||||
int autosize;
|
||||
int p66;
|
||||
|
||||
maybe_print_stats();
|
||||
/* force synthetic ';' after prefix instruction, so we can handle */
|
||||
/* one-line things like "rep stosb" instead of only "rep\nstosb" */
|
||||
if (opcode >= TOK_ASM_wait && opcode <= TOK_ASM_repnz)
|
||||
|
32
tccasm.c
32
tccasm.c
@ -757,38 +757,6 @@ static int tcc_assemble_internal(TCCState *s1, int do_preprocess)
|
||||
{
|
||||
int opcode;
|
||||
|
||||
#if 0
|
||||
/* print stats about opcodes */
|
||||
{
|
||||
const ASMInstr *pa;
|
||||
int freq[4];
|
||||
int op_vals[500];
|
||||
int nb_op_vals, i, j;
|
||||
|
||||
nb_op_vals = 0;
|
||||
memset(freq, 0, sizeof(freq));
|
||||
for(pa = asm_instrs; pa->sym != 0; pa++) {
|
||||
freq[pa->nb_ops]++;
|
||||
for(i=0;i<pa->nb_ops;i++) {
|
||||
for(j=0;j<nb_op_vals;j++) {
|
||||
if (pa->op_type[i] == op_vals[j])
|
||||
goto found;
|
||||
}
|
||||
op_vals[nb_op_vals++] = pa->op_type[i];
|
||||
found: ;
|
||||
}
|
||||
}
|
||||
for(i=0;i<nb_op_vals;i++) {
|
||||
int v = op_vals[i];
|
||||
if ((v & (v - 1)) != 0)
|
||||
printf("%3d: %08x\n", i, v);
|
||||
}
|
||||
printf("size=%d nb=%d f0=%d f1=%d f2=%d f3=%d\n",
|
||||
sizeof(asm_instrs), sizeof(asm_instrs) / sizeof(ASMInstr),
|
||||
freq[0], freq[1], freq[2], freq[3]);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* XXX: undefine C labels */
|
||||
|
||||
ch = file->buf_ptr[0];
|
||||
|
Loading…
Reference in New Issue
Block a user