change queues, run exec speed optimizations
This commit is contained in:
@@ -27,13 +27,12 @@ void freeDevMem(device_mem_t* devMem)
|
||||
{
|
||||
free(devMem->memsegShifts);
|
||||
free(devMem->memsegSizes);
|
||||
free(devMem->memsegCellSizes);
|
||||
free(devMem->rawCells);
|
||||
free(devMem->memreadCellAddrs);
|
||||
free(devMem->memwriteCellAddrs);
|
||||
free(devMem->memwriteCellSegments);
|
||||
free(devMem->memwriteValues[0]);
|
||||
free(devMem->memwriteValues);
|
||||
free(devMem->memwriteWordLengths);
|
||||
free(devMem->cells);
|
||||
free(devMem->smartAddrReadHandlers);
|
||||
free(devMem->smartAddrWriteHandlers);
|
||||
@@ -118,10 +117,6 @@ device_mem_t* genDevMem(device_specs_t* devSpec, char* errbuf)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for(size_t i = 0; i < devSpec->memSpecsCount; i++)
|
||||
{
|
||||
// cellNames[i] = devSpec->memSpecs[i]->name;
|
||||
}
|
||||
|
||||
for (uint8_t i = 0; i < devSpec->memSpecsCount; i++)
|
||||
{
|
||||
@@ -170,8 +165,7 @@ device_mem_t* genDevMem(device_specs_t* devSpec, char* errbuf)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void** memwriteValues = calloc(MEM_ACCESS_INTERCEPT_BUF_SIZE, sizeof(void*));
|
||||
|
||||
uint64_t* memwriteValues = calloc(MEM_ACCESS_INTERCEPT_BUF_SIZE, sizeof(uint64_t));
|
||||
if(memwriteValues == NULL)
|
||||
{
|
||||
sprintf(errbuf, "unable to allocate write interception addrs");
|
||||
@@ -186,43 +180,6 @@ device_mem_t* genDevMem(device_specs_t* devSpec, char* errbuf)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
uint64_t* memwriteValuesContainers = calloc(MEM_ACCESS_INTERCEPT_BUF_SIZE, sizeof(uint64_t));
|
||||
if(memwriteValuesContainers == NULL)
|
||||
{
|
||||
sprintf(errbuf, "unable to allocate write interception addrs");
|
||||
free(devMem->memsegShifts);
|
||||
free(devMem);
|
||||
free(rawCells);
|
||||
free(memreadCellAddrs);
|
||||
free(cells);
|
||||
free(cellNames);
|
||||
free(memwriteCellAddrs);
|
||||
free(memwriteCellSegments);
|
||||
free(memwriteValues);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for(size_t i = 0; i < 64; i++)
|
||||
{
|
||||
memwriteValues[i] = &memwriteValuesContainers[i];
|
||||
}
|
||||
|
||||
uint8_t* memwriteWordLengths = calloc(MEM_ACCESS_INTERCEPT_BUF_SIZE, sizeof(uint8_t));
|
||||
if(memwriteWordLengths == NULL)
|
||||
{
|
||||
sprintf(errbuf, "unable to allocate write interception addrs");
|
||||
free(devMem->memsegShifts);
|
||||
free(devMem);
|
||||
free(rawCells);
|
||||
free(memreadCellAddrs);
|
||||
free(cells);
|
||||
free(cellNames);
|
||||
free(memwriteCellAddrs);
|
||||
free(memwriteCellSegments);
|
||||
free(memwriteValues);
|
||||
free(memwriteValuesContainers);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
uint64_t smartAddrReadMask = 0;
|
||||
uint64_t smartAddrWriteMask = 0;
|
||||
@@ -240,8 +197,6 @@ device_mem_t* genDevMem(device_specs_t* devSpec, char* errbuf)
|
||||
free(memwriteCellAddrs);
|
||||
free(memwriteCellSegments);
|
||||
free(memwriteValues);
|
||||
free(memwriteValuesContainers);
|
||||
free(memwriteWordLengths);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -259,8 +214,6 @@ device_mem_t* genDevMem(device_specs_t* devSpec, char* errbuf)
|
||||
free(memwriteCellAddrs);
|
||||
free(memwriteCellSegments);
|
||||
free(memwriteValues);
|
||||
free(memwriteValuesContainers);
|
||||
free(memwriteWordLengths);
|
||||
free(cells);
|
||||
free(cellNames);
|
||||
return NULL;
|
||||
@@ -270,7 +223,26 @@ device_mem_t* genDevMem(device_specs_t* devSpec, char* errbuf)
|
||||
if(memsegSizes == NULL)
|
||||
{
|
||||
|
||||
sprintf(errbuf, "unable to allocate write interception handlers");
|
||||
sprintf(errbuf, "unable to allocate memseg sizes");
|
||||
free(smartAddrWriteHandlers);
|
||||
free(smartAddrReadHandlers);
|
||||
free(devMem->memsegShifts);
|
||||
free(devMem);
|
||||
free(rawCells);
|
||||
free(memreadCellAddrs);
|
||||
free(memwriteCellAddrs);
|
||||
free(memwriteCellSegments);
|
||||
free(memwriteValues);
|
||||
free(cells);
|
||||
free(cellNames);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
uint8_t* memsegCellSizes = calloc(devSpec->memSpecsCount, sizeof(uint8_t));
|
||||
if(memsegCellSizes == NULL)
|
||||
{
|
||||
sprintf(errbuf, "unable to allocate memseg cell sizes");
|
||||
free(memsegSizes);
|
||||
free(smartAddrWriteHandlers);
|
||||
free(smartAddrReadHandlers);
|
||||
free(devMem->memsegShifts);
|
||||
@@ -280,31 +252,29 @@ device_mem_t* genDevMem(device_specs_t* devSpec, char* errbuf)
|
||||
free(memwriteCellAddrs);
|
||||
free(memwriteCellSegments);
|
||||
free(memwriteValues);
|
||||
free(memwriteValuesContainers);
|
||||
free(memwriteWordLengths);
|
||||
free(cells);
|
||||
free(cellNames);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
for(uint64_t i = 0; i < memTotalSize; i++)
|
||||
{
|
||||
smartAddrReadHandlers[i].func = NULL;
|
||||
smartAddrReadHandlers[i].ident = 0;
|
||||
// for(uint64_t i = 0; i < memTotalSize; i++)
|
||||
// {
|
||||
// smartAddrReadHandlers[i].func = NULL;
|
||||
// smartAddrReadHandlers[i].ident = 0;
|
||||
|
||||
smartAddrWriteHandlers[i].func = NULL;
|
||||
smartAddrWriteHandlers[i].ident = 0;
|
||||
}
|
||||
// smartAddrWriteHandlers[i].func = NULL;
|
||||
// smartAddrWriteHandlers[i].ident = 0;
|
||||
// }
|
||||
|
||||
|
||||
for(uint64_t i = 0; i < memTotalSize; i++)
|
||||
{
|
||||
if((i & smartAddrReadMask) == smartAddrReadMask)
|
||||
{
|
||||
smartAddrReadHandlers[i].func = NULL;
|
||||
}
|
||||
}
|
||||
// for(uint64_t i = 0; i < memTotalSize; i++)
|
||||
// {
|
||||
// if((i & smartAddrReadMask) == smartAddrReadMask)
|
||||
// {
|
||||
// smartAddrReadHandlers[i].func = NULL;
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
if (devSpec->smartReadSpecsCount > 0)
|
||||
@@ -355,7 +325,6 @@ device_mem_t* genDevMem(device_specs_t* devSpec, char* errbuf)
|
||||
devMem->memreadCellAddrs = memreadCellAddrs;
|
||||
devMem->memwriteCellAddrs = memwriteCellAddrs;
|
||||
devMem->memwriteCellSegments = memwriteCellSegments;
|
||||
devMem->memwriteWordLengths = memwriteWordLengths;
|
||||
devMem->memwriteValues = memwriteValues;
|
||||
devMem->memreadLen = 0;
|
||||
devMem->memwriteLen = 0;
|
||||
@@ -365,6 +334,7 @@ device_mem_t* genDevMem(device_specs_t* devSpec, char* errbuf)
|
||||
devMem->smartAddrWriteHandlers = smartAddrWriteHandlers;
|
||||
devMem->memsegNames = cellNames;
|
||||
devMem->memsegSizes = memsegSizes;
|
||||
devMem->memsegCellSizes = memsegCellSizes;
|
||||
|
||||
memseg_metadata_t requiredSegments[] = MEMSEG_DEFINES;
|
||||
|
||||
@@ -380,7 +350,8 @@ device_mem_t* genDevMem(device_specs_t* devSpec, char* errbuf)
|
||||
const uint8_t seg_id = seg_def.seg_id;
|
||||
devMem->memsegShifts[seg_id] = memSegToGlobal(devSpec, i, 0);
|
||||
devMem->memsegSizes[seg_id] = devSpec->memSpecs[i]->len;
|
||||
printf("set mem segment %d meta: +%lu/%lu \n", seg_id, devMem->memsegShifts[j], devMem->memsegSizes[j]);
|
||||
devMem->memsegCellSizes[seg_id] = devSpec->memSpecs[i]->wordLen;
|
||||
printf("set mem segment %d meta: +%lu/%lu[%d] \n", seg_id, devMem->memsegShifts[seg_id], devMem->memsegSizes[seg_id], devMem->memsegCellSizes[seg_id]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -404,6 +375,10 @@ uint8_t makeDeviceTick(device_public_context_t* devContext)
|
||||
prog_counter_t _pc;
|
||||
READ_MEM(_pc, devInfo->deviceMem, MEMSEG_PC_SEG_NUM, MEMSEG_PC_ADDR, prog_counter_t)
|
||||
// printf("old PC is %d\n", _pc);
|
||||
if(_pc >= devInfo->deviceMem->memsegSizes[MEMSEG_PS])
|
||||
{
|
||||
_pc = 0;
|
||||
}
|
||||
uint8_t ticks = makeTick(&_pc, devInfo->instr, devInfo->deviceMem);
|
||||
WRITE_MEM(devInfo->deviceMem, MEMSEG_PC_SEG_NUM, MEMSEG_PC_ADDR, prog_counter_t, _pc);
|
||||
// printf("new PC is %d\n", _pc);
|
||||
@@ -593,7 +568,7 @@ device_specs_t* parseSpecsFromConfig(const conf_dev_t* devConf, char* errbuf)
|
||||
free(requiredSegmentsFoundMap);
|
||||
return NULL;
|
||||
}
|
||||
specs->memSpecs[specNum]->name = calloc(strlen(segments[i]->name), sizeof(char));
|
||||
specs->memSpecs[specNum]->name = calloc(strlen(segments[i]->name) + 1, sizeof(char));
|
||||
if(specs->memSpecs[specNum]->name == NULL)
|
||||
{
|
||||
sprintf(errbuf, "unable to allocate spec %d name", i);
|
||||
@@ -837,6 +812,8 @@ uint8_t pubExtractPcounterSizeWords()
|
||||
|
||||
void reset (device_specs_t* specs, device_public_context_t* devInfo)
|
||||
{
|
||||
// printf("reset device\n");
|
||||
// uint8_t fuck = 0;
|
||||
for(size_t i = 0; i < specs->memSpecsCount; i++)
|
||||
{
|
||||
if(i != MEMDATA_OPSIZE)
|
||||
@@ -845,10 +822,12 @@ void reset (device_specs_t* specs, device_public_context_t* devInfo)
|
||||
for(size_t j = 0; j < spec->len; j++)
|
||||
{
|
||||
((uint8_t*)devInfo->deviceMem->cells[i])[j] = 0;
|
||||
// fuck++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
devInfo->deviceMem->memwriteLen = 0;
|
||||
devInfo->deviceMem->memreadLen = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user