1 |
/* |
/* |
2 |
* Copyright (C) 2005-2006 Anders Gavare. All rights reserved. |
* Copyright (C) 2005-2007 Anders Gavare. All rights reserved. |
3 |
* |
* |
4 |
* Redistribution and use in source and binary forms, with or without |
* Redistribution and use in source and binary forms, with or without |
5 |
* modification, are permitted provided that the following conditions are met: |
* modification, are permitted provided that the following conditions are met: |
25 |
* SUCH DAMAGE. |
* SUCH DAMAGE. |
26 |
* |
* |
27 |
* |
* |
28 |
* $Id: generate_head.c,v 1.18 2006/07/20 21:53:00 debug Exp $ |
* $Id: generate_head.c,v 1.30 2007/06/28 13:36:47 debug Exp $ |
29 |
*/ |
*/ |
30 |
|
|
31 |
#include <stdio.h> |
#include <stdio.h> |
131 |
"#define instr32(n) %s32_instr_ ## n\n\n", a); |
"#define instr32(n) %s32_instr_ ## n\n\n", a); |
132 |
printf("#endif\n\n"); |
printf("#endif\n\n"); |
133 |
|
|
|
printf("/* This is for marking a physical page as containing" |
|
|
"\n combined instructions: */\n"); |
|
|
printf("#define combined (cpu->cd.%s.cur_physpage->flags " |
|
|
"|= COMBINATIONS)\n", a); |
|
|
|
|
134 |
printf("\n#define X(n) void %s_instr_ ## n(struct cpu *cpu, \\\n" |
printf("\n#define X(n) void %s_instr_ ## n(struct cpu *cpu, \\\n" |
135 |
" struct %s_instr_call *ic)\n", a, a); |
" struct %s_instr_call *ic)\n", a, a); |
136 |
|
|
137 |
printf("\n/*\n * nothing: Do nothing.\n *\n" |
printf("\n/*\n * nothing: Do nothing.\n *\n" |
138 |
" * The difference between this function and a \"nop\" " |
" * The difference between this function and a \"nop\" " |
139 |
"instruction is that\n * this function does not increase " |
"instruction is that\n * this function does not increase " |
140 |
"the program counter or the number of\n * translated " |
"the program counter. It is used to \"get out\" of running in " |
141 |
"instructions. It is used to \"get out\" of running in " |
"translated\n * mode.\n */\n"); |
|
"translated\n * mode.\n *\n" |
|
|
" * IMPORTANT NOTE: Do a cpu->running_translated = 0;\n" |
|
|
" * before setting cpu->cd.%s.next_ic = " |
|
|
"¬hing_call;\n */\n", a); |
|
142 |
printf("X(nothing)\n{\n"); |
printf("X(nothing)\n{\n"); |
|
printf("\tcpu->n_translated_instrs --;\n"); |
|
143 |
printf("\tcpu->cd.%s.next_ic --;\n", a); |
printf("\tcpu->cd.%s.next_ic --;\n", a); |
144 |
printf("}\n\n"); |
printf("}\n\n"); |
145 |
|
|
146 |
/* Ugly special hack for Transputer: */ |
/* Ugly special hacks for SH[34]: */ |
147 |
if (strcasecmp(argv[1], "transputer") == 0) { |
if (strcasecmp(argv[1], "sh") == 0) { |
148 |
printf("static struct %s_instr_call nothing_call = { " |
printf("static struct %s_instr_call nothing_call = { " |
149 |
"instr(nothing), {0} };\n", a); |
"instr(nothing), {0,0} };\n", a); |
150 |
} else { |
} else { |
151 |
printf("static struct %s_instr_call nothing_call = { " |
printf("static struct %s_instr_call nothing_call = { " |
152 |
"instr(nothing), {0,0,0} };\n", a); |
"instr(nothing), {0,0,0} };\n", a); |