add math gates, fix 32-bit shifters
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
|
||||
#include <assert.h>
|
||||
//#include <assert.h>
|
||||
|
||||
struct Net;
|
||||
struct Gate;
|
||||
@@ -41,7 +41,7 @@ int* current_tick;
|
||||
//static const int queue_max = 65536;
|
||||
extern GateFunc sim_logic_functions[];
|
||||
|
||||
DLL void sim_set_data(struct Net** net_queue, int* num_net_queue, struct Gate** gate_queue, int* num_gate_queue, int* current_tick, int queue_max);
|
||||
DLL void sim_set_data(struct Net** net_queue_in, int* num_net_queue_in, struct Gate** gate_queue_in, int* num_gate_queue_in, int* current_tick_in, int queue_max_in);
|
||||
DLL void sim_update_nets();
|
||||
DLL void sim_update_gates();
|
||||
|
||||
@@ -140,25 +140,30 @@ FAST void sim_gate_set_port(const struct Gate* const gate, const int port, const
|
||||
}
|
||||
}
|
||||
FAST int sim_gate_get_data(const struct Gate* const gate, const int addr) {
|
||||
assert(addr>=0 && addr<gate->data_size);
|
||||
//assert(addr>=0 && addr<gate->data_size);
|
||||
return gate->data[addr];
|
||||
}
|
||||
FAST void sim_gate_set_data(const struct Gate* const gate, const int addr, const int val) {
|
||||
assert(addr>=0 && addr<gate->data_size);
|
||||
//assert(addr>=0 && addr<gate->data_size);
|
||||
gate->data[addr] = val;
|
||||
}
|
||||
FAST int sim_gate_get_word(const struct Gate* const gate, const int size, const int idx) {
|
||||
FAST unsigned int sim_gate_get_word(const struct Gate* const gate, const int size, const int idx) {
|
||||
int val = 0;
|
||||
for(int i=0; i<size; i++) {
|
||||
val += sim_gate_get_port(gate, idx+i) << i;
|
||||
}
|
||||
return val;
|
||||
}
|
||||
FAST void sim_gate_set_word(const struct Gate* const gate, const int size, const int idx, const int val) {
|
||||
FAST void sim_gate_set_word(const struct Gate* const gate, const int size, const int idx, const unsigned int val) {
|
||||
for(int i=0; i<size; i++) {
|
||||
sim_gate_set_port(gate, idx+i, (val>>i) & 1);
|
||||
}
|
||||
}
|
||||
FAST void sim_gate_set_word_64(const struct Gate* const gate, const int size, const int idx, const unsigned long long val) {
|
||||
for(int i=0; i<size; i++) {
|
||||
sim_gate_set_port(gate, idx+i, (val>>(unsigned long long)i) & 1ull);
|
||||
}
|
||||
}
|
||||
|
||||
////
|
||||
|
||||
@@ -174,5 +179,6 @@ FAST void sim_gate_set_word(const struct Gate* const gate, const int size, const
|
||||
#define getword(size, idx) sim_gate_get_word(gate, size, idx)
|
||||
#define clearword(size, idx) for(int i=0;i<size;i++) { setport(idx+i, 0); }
|
||||
#define setword(size, idx, val) sim_gate_set_word(gate, size, idx, val)
|
||||
#define setword64(size, idx, val) sim_gate_set_word_64(gate, size, idx, val)
|
||||
|
||||
#include "compiled_sim_gates.c"
|
||||
|
||||
Reference in New Issue
Block a user