/*5:*/
#line 151 "mmix-pipe.w"
#define Extern extern
/*6:*/
#line 164 "mmix-pipe.w"
#ifdef __STDC__
#define ARGS(list) list
#else
#define ARGS(list) ()
#endif
/*:6*//*7:*/
#line 176 "mmix-pipe.w"
#define random my_random
#define fsqrt my_fsqrt
#define div my_div
/*:7*//*8:*/
#line 183 "mmix-pipe.w"
#define issue_bit (1<<0)
#define pipe_bit (1<<1)
#define coroutine_bit (1<<2)
#define schedule_bit (1<<3)
#define uninit_mem_bit (1<<4)
#define interactive_read_bit (1<<5)
#define show_spec_bit (1<<6)
#define show_pred_bit (1<<7)
#define show_wholecache_bit (1<<8)
/*:8*//*52:*/
#line 1114 "mmix-pipe.w"
#define rA 21
#define rB 0
#define rC 8
#define rD 1
#define rE 2
#define rF 22
#define rG 19
#define rH 3
#define rI 12
#define rJ 4
#define rK 15
#define rL 20
#define rM 5
#define rN 9
#define rO 10
#define rP 23
#define rQ 16
#define rR 6
#define rS 11
#define rT 13
#define rU 17
#define rV 18
#define rW 24
#define rX 25
#define rY 26
#define rZ 27
#define rBB 7
#define rTT 14
#define rWW 28
#define rXX 29
#define rYY 30
#define rZZ 31
/*:52*//*57:*/
#line 1195 "mmix-pipe.w"
#define POWER_FAILURE (1<<0)
#define PARITY_ERROR (1<<1)
#define NONEXISTENT_MEMORY (1<<2)
#define REBOOT_SIGNAL (1<<4)
#define INTERVAL_TIMEOUT (1<<7)
/*:57*//*87:*/
#line 1831 "mmix-pipe.w"
#define ticks g[rC].o
/*:87*//*129:*/
#line 2412 "mmix-pipe.w"
#define max_stage 99
#define vanish 98
#define flush_to_mem 97
#define flush_to_S 96
#define fill_from_mem 95
#define fill_from_S 94
#define fill_from_virt 93
#define write_from_wbuf 92
#define cleanup 91
/*:129*//*166:*/
#line 3116 "mmix-pipe.w"
#define WRITE_BACK 1
#define WRITE_ALLOC 2
/*:166*/
#line 153 "mmix-pipe.w"
/*11:*/
#line 243 "mmix-pipe.w"
typedef enum{false,true,wow}bool;
/*:11*//*17:*/
#line 315 "mmix-pipe.w"
typedef unsigned int tetra;
typedef struct{tetra h,l;}octa;
/*:17*//*23:*/
#line 433 "mmix-pipe.w"
typedef struct coroutine_struct{
char*name;
int stage;
struct coroutine_struct*next;
struct coroutine_struct**lockloc;
struct control_struct*ctl;
}coroutine;
/*:23*//*37:*/
#line 603 "mmix-pipe.w"
typedef coroutine*lockvar;
/*:37*//*40:*/
#line 646 "mmix-pipe.w"
typedef struct{
octa o;
struct specnode_struct*p;
}spec;
typedef struct specnode_struct{
octa o;
bool known;
octa addr;
struct specnode_struct*up,*down;
}specnode;
/*:40*//*44:*/
#line 728 "mmix-pipe.w"
/*47:*/
#line 798 "mmix-pipe.w"
typedef enum{
TRAP,FCMP,FUN,FEQL,FADD,FIX,FSUB,FIXU,
FLOT,FLOTI,FLOTU,FLOTUI,SFLOT,SFLOTI,SFLOTU,SFLOTUI,
FMUL,FCMPE,FUNE,FEQLE,FDIV,FSQRT,FREM,FINT,
MUL,MULI,MULU,MULUI,DIV,DIVI,DIVU,DIVUI,
ADD,ADDI,ADDU,ADDUI,SUB,SUBI,SUBU,SUBUI,
IIADDU,IIADDUI,IVADDU,IVADDUI,VIIIADDU,VIIIADDUI,XVIADDU,XVIADDUI,
CMP,CMPI,CMPU,CMPUI,NEG,NEGI,NEGU,NEGUI,
SL,SLI,SLU,SLUI,SR,SRI,SRU,SRUI,
BN,BNB,BZ,BZB,BP,BPB,BOD,BODB,
BNN,BNNB,BNZ,BNZB,BNP,BNPB,BEV,BEVB,
PBN,PBNB,PBZ,PBZB,PBP,PBPB,PBOD,PBODB,
PBNN,PBNNB,PBNZ,PBNZB,PBNP,PBNPB,PBEV,PBEVB,
CSN,CSNI,CSZ,CSZI,CSP,CSPI,CSOD,CSODI,
CSNN,CSNNI,CSNZ,CSNZI,CSNP,CSNPI,CSEV,CSEVI,
ZSN,ZSNI,ZSZ,ZSZI,ZSP,ZSPI,ZSOD,ZSODI,
ZSNN,ZSNNI,ZSNZ,ZSNZI,ZSNP,ZSNPI,ZSEV,ZSEVI,
LDB,LDBI,LDBU,LDBUI,LDW,LDWI,LDWU,LDWUI,
LDT,LDTI,LDTU,LDTUI,LDO,LDOI,LDOU,LDOUI,
LDSF,LDSFI,LDHT,LDHTI,CSWAP,CSWAPI,LDUNC,LDUNCI,
LDVTS,LDVTSI,PRELD,PRELDI,PREGO,PREGOI,GO,GOI,
STB,STBI,STBU,STBUI,STW,STWI,STWU,STWUI,
STT,STTI,STTU,STTUI,STO,STOI,STOU,STOUI,
STSF,STSFI,STHT,STHTI,STCO,STCOI,STUNC,STUNCI,
SYNCD,SYNCDI,PREST,PRESTI,SYNCID,SYNCIDI,PUSHGO,PUSHGOI,
OR,ORI,ORN,ORNI,NOR,NORI,XOR,XORI,
AND,ANDI,ANDN,ANDNI,NAND,NANDI,NXOR,NXORI,
BDIF,BDIFI,WDIF,WDIFI,TDIF,TDIFI,ODIF,ODIFI,
MUX,MUXI,SADD,SADDI,MOR,MORI,MXOR,MXORI,
SETH,SETMH,SETML,SETL,INCH,INCMH,INCML,INCL,
ORH,ORMH,ORML,ORL,ANDNH,ANDNMH,ANDNML,ANDNL,
JMP,JMPB,PUSHJ,PUSHJB,GETA,GETAB,PUT,PUTI,
POP,RESUME,SAVE,UNSAVE,SYNC,SWYM,GET,TRIP}mmix_opcode;
/*:47*//*49:*/
#line 877 "mmix-pipe.w"
#define max_pipe_op feps
#define max_real_command trip
typedef enum{
mul0,
mul1,
mul2,
mul3,
mul4,
mul5,
mul6,
mul7,
mul8,
div,
sh,
mux,
sadd,
mor,
fadd,
fmul,
fdiv,
fsqrt,
fint,
fix,
flot,
feps,
fcmp,
funeq,
fsub,
frem,
mul,
mulu,
divu,
add,
addu,
sub,
subu,
set,
or,
orn,
nor,
and,
andn,
nand,
xor,
nxor,
shlu,
shru,
shl,
shr,
cmp,
cmpu,
bdif,
wdif,
tdif,
odif,
zset,
cset,
get,
put,
ld,
ldptp,
ldpte,
ldunc,
ldvts,
preld,
prest,
st,
syncd,
syncid,
pst,
stunc,
cswap,
br,
pbr,
pushj,
go,
prego,
pushgo,
pop,
resume,
save,
unsave,
sync,
jmp,
noop,
trap,
trip,
incgamma,
decgamma,
incrl,
sav,
unsav,
resum
}internal_opcode;
/*:49*/
#line 729 "mmix-pipe.w"
typedef struct control_struct{
octa loc;
mmix_opcode op;unsigned char xx,yy,zz;
spec y,z,b,ra;
specnode x,a,go,rl;
coroutine*owner;
internal_opcode i;
int state;
bool usage;
bool need_b;
bool need_ra;
bool ren_x;
bool mem_x;
bool ren_a;
bool set_l;
bool interim;
unsigned int arith_exc;
unsigned int hist;
int denin,denout;
octa cur_O,cur_S;
unsigned int interrupt;
void*ptr_a,*ptr_b,*ptr_c;
}control;
/*:44*//*68:*/
#line 1495 "mmix-pipe.w"
typedef struct{
octa loc;
tetra inst;
unsigned int interrupt;
bool noted;
unsigned int hist;
}fetch;
/*:68*//*76:*/
#line 1631 "mmix-pipe.w"
typedef struct func_struct{
char name[16];
tetra ops[8];
int k;
coroutine*co;
}func;
/*:76*//*164:*/
#line 3083 "mmix-pipe.w"
typedef enum{random,serial,pseudo_lru,lru}replace_policy;
/*:164*//*167:*/
#line 3127 "mmix-pipe.w"
typedef struct{
octa tag;
char*dirty;
octa*data;
int rank;
}cacheblock;
typedef cacheblock*cacheset;
typedef struct{
int a,b,c,g,v;
int aa,bb,cc,gg,vv;
int tagmask;
replace_policy repl,vrepl;
int mode;
int access_time;
int copy_in_time;
int copy_out_time;
cacheset*set;
cacheset victim;
coroutine filler;
control filler_ctl;
coroutine flusher;
control flusher_ctl;
cacheblock inbuf;
cacheblock outbuf;
lockvar lock;
lockvar fill_lock;
int ports;
coroutine*reader;
char*name;
}cache;
/*:167*//*206:*/
#line 3647 "mmix-pipe.w"
typedef struct{
tetra tag;
octa*chunk;
}chunknode;
/*:206*//*246:*/
#line 4386 "mmix-pipe.w"
typedef struct{
octa o;
octa addr;
tetra stamp;
internal_opcode i;
}write_node;
/*:246*//*371:*/
#line 6455 "mmix-pipe.w"
typedef enum{
Halt,Fopen,Fclose,Fread,Fgets,Fgetws,
Fwrite,Fputs,Fputws,Fseek,Ftell}sys_call;
/*:371*/
#line 154 "mmix-pipe.w"
/*4:*/
#line 146 "mmix-pipe.w"
Extern int verbose;
/*:4*//*29:*/
#line 512 "mmix-pipe.w"
Extern int ring_size;
Extern coroutine*ring;
Extern int cur_time;
/*:29*//*59:*/
#line 1366 "mmix-pipe.w"
Extern int fetch_max,dispatch_max,peekahead,commit_max;
/*:59*//*60:*/
#line 1392 "mmix-pipe.w"
Extern control*reorder_bot,*reorder_top;
Extern control*hot,*cool;
Extern control*old_hot;
Extern int deissues;
/*:60*//*66:*/
#line 1451 "mmix-pipe.w"
Extern int*dispatch_stat;
Extern bool security_disabled;
/*:66*//*69:*/
#line 1514 "mmix-pipe.w"
Extern fetch*fetch_bot,*fetch_top;
Extern fetch*head,*tail;
/*:69*//*77:*/
#line 1639 "mmix-pipe.w"
Extern func*funit;
Extern int funit_count;
/*:77*//*86:*/
#line 1823 "mmix-pipe.w"
Extern specnode g[256];
Extern specnode*l;
Extern int lring_size;
Extern int max_rename_regs,max_mem_slots;
Extern int rename_regs,mem_slots;
/*:86*//*98:*/
#line 1949 "mmix-pipe.w"
Extern octa cool_O,cool_S;
/*:98*//*115:*/
#line 2175 "mmix-pipe.w"
Extern specnode mem;
/*:115*//*136:*/
#line 2541 "mmix-pipe.w"
#define pipe_limit 90
Extern unsigned char pipe_seq[max_pipe_op+1][pipe_limit+1];
/*:136*//*150:*/
#line 2824 "mmix-pipe.w"
Extern int bp_a,bp_b,bp_c,bp_n;
Extern char*bp_table;
/*:150*//*168:*/
#line 3165 "mmix-pipe.w"
Extern cache*Icache,*Dcache,*Scache,*ITcache,*DTcache;
/*:168*//*207:*/
#line 3659 "mmix-pipe.w"
Extern int mem_chunks;
Extern int mem_chunks_max;
Extern int hash_prime;
Extern chunknode*mem_hash;
/*:207*//*211:*/
#line 3709 "mmix-pipe.w"
Extern int last_h;
/*:211*//*214:*/
#line 3752 "mmix-pipe.w"
Extern int mem_addr_time;
Extern int bus_words;
Extern int mem_read_time;
Extern int mem_write_time;
Extern lockvar mem_lock;
/*:214*//*242:*/
#line 4320 "mmix-pipe.w"
Extern bool no_hardware_PT;
/*:242*//*247:*/
#line 4401 "mmix-pipe.w"
Extern write_node*wbuf_bot,*wbuf_top;
Extern write_node*write_head,*write_tail;
Extern lockvar wbuf_lock;
Extern int holding_time;
Extern lockvar speed_lock;
/*:247*//*284:*/
#line 5104 "mmix-pipe.w"
Extern spec inst_ptr;
Extern octa*fetched;
/*:284*//*349:*/
#line 6116 "mmix-pipe.w"
Extern int frem_max;
Extern int denin_penalty,denout_penalty;
/*:349*/
#line 155 "mmix-pipe.w"
/*9:*/
#line 209 "mmix-pipe.w"
Extern void MMIX_init ARGS((void));
Extern void MMIX_run ARGS((int cycs,octa breakpoint));
/*:9*//*38:*/
#line 606 "mmix-pipe.w"
Extern void print_locks ARGS((void));
/*:38*//*161:*/
#line 2975 "mmix-pipe.w"
Extern void print_stats ARGS((void));
/*:161*//*175:*/
#line 3221 "mmix-pipe.w"
Extern void print_cache ARGS((cache*,bool));
/*:175*//*178:*/
#line 3265 "mmix-pipe.w"
Extern void clean_block ARGS((cache*,cacheblock*));
/*:178*//*180:*/
#line 3282 "mmix-pipe.w"
Extern void zap_cache ARGS((cache*));
/*:180*//*209:*/
#line 3684 "mmix-pipe.w"
Extern octa mem_read ARGS((octa addr));
/*:209*//*212:*/
#line 3712 "mmix-pipe.w"
Extern void mem_write ARGS((octa addr,octa val));
/*:212*//*252:*/
#line 4447 "mmix-pipe.w"
Extern void print_pipe ARGS((void));
/*:252*/
#line 156 "mmix-pipe.w"
/*:5*/
syntax highlighted by Code2HTML, v. 0.9.1