Source code for AINT is available at the URL:
This distribution contains the aint source code, example simulators, and several simple tests programs. The source-code alone can be downloaded by retrieving the file
The entire simulated address space is now implemented using page tables. Only memory locations read/written by the application are explicitly allocated. This results in significant reductions in memory used by AINT.
This change is transparent to the back-end simulator
It is now possible to specify the events that cause the back-end simulator functions to be called. In particular, the user can specify (using command line options) flagging of all memory references, only shared references, only private references, or every instruction.
The back-end function sim_inst is called after every instruction (other than read, write, ld_l, st_c and mb insts), if instruction tracing is specified.
The *ptask->pevent structure passed to sim_read, sim_write, sim_load_locked, sim_store_conditional, sim_memory_barrier and sim_inst functions contains a field (struct icode *picode), that points to the internal structure representing the current instruction. The icode structure is defined in $AINTDIR/include/icode.h.
The back-end function sim_user is provided as a call-back mechanism from the application into the back-end simulator. To use this feature, applications need to declare and call an empty function called sim_user, defined in sim.h. AINT remaps the call to the actual back-end function sim_user().
Whenever the application calles sim_user, control is transfered to the simulator's sim_user function with the same argument (values) as the application-space sim_user. This can be used to trap special macro-events such as lock acquires and releases.
The Splash2 implementation provided with AINT now uses queueing locks to reduce contention (on a real multiprocessor). The queueing locks implementation (ulocks.c) also uses the sim_user CALL-BACK mechanism discussed above.
Several bugs in the Splash2 implementation have been fixed, and these programs can now be run with several processors (we have tested up to 16) on AINT as well as natively.
int size; /* size in bytes of the data for read/write */ long data; /* data value for read/write */The size specifies whether the load/store involves a longword (4 bytes) or a quadword (8 bytes). The data field contains the contents of the memory location to be loaded into a register (load instruction), or the value to be written to memory (store instruction).
Please direct questions about AINT to Vega Paithankar (pvega@cs.colorado.edu)