diff --git a/ISA.h b/ISA.h index 0b825f9..89a66b4 100644 --- a/ISA.h +++ b/ISA.h @@ -39,7 +39,8 @@ typedef void (CPU::*alu_funcpr)(void); #define OP_SWL 42 #define OP_SW 43 #define OP_SWR 46 -/* OPCODE 44,45,47 are reserved */ +#define OP_CACHE 47 +/* OPCODE 44,45 are reserved */ #define OP_LWC0 48 #define OP_LWC1 49 #define OP_LWC2 50 @@ -131,7 +132,7 @@ static operand_decodepr firstSrcDecTable[64] = { NULL, NULL, NULL, NULL, CPU::no_reg, CPU::no_reg, CPU::no_reg, CPU::no_reg, CPU::no_reg, CPU::no_reg, CPU::no_reg, CPU::no_reg, CPU::no_reg, CPU::no_reg, CPU::no_reg, CPU::no_reg, CPU::rs, CPU::rs, CPU::rs, CPU::rs, CPU::rs, CPU::rs, CPU::rs,CPU::no_reg, - CPU::rs, CPU::rs, CPU::rs, CPU::rs,CPU::no_reg,CPU::no_reg, CPU::rs, CPU::no_reg, + CPU::rs, CPU::rs, CPU::rs, CPU::rs,CPU::no_reg,CPU::no_reg, CPU::rs, CPU::rs, CPU::no_reg, CPU::no_reg, CPU::no_reg, CPU::no_reg, CPU::no_reg, CPU::no_reg, CPU::no_reg, CPU::no_reg, CPU::no_reg, CPU::no_reg, CPU::no_reg, CPU::no_reg, CPU::no_reg, CPU::no_reg, CPU::no_reg, CPU::no_reg }; @@ -234,7 +235,7 @@ static bool mem_write_flag[64] = { }; //indexed by opcode -//flag of mem write +//flag of mem read static bool mem_read_flag[64] = { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, @@ -254,7 +255,7 @@ static bool RI_flag[64] = { false, false, false, false, true , true , true , true , true , true , true , true , true , true , true , true , false, false, false, false, false, false, false, true , - false, false, false, false, true , true , false, true , + false, false, false, false, true , true , false, false , false, false, false, false, true , true , true , true , false, false, false, false, true , true , true , true }; @@ -271,6 +272,14 @@ static bool RI_special_flag[64] = { true , true , true , true , true , true , true , true }; +//indexed by cache op operand (rt) +static bool RI_cache_op_flag[32] = { + true, false, true, true, false, false, true, true, + true, false, true, true, true, true, true, true, + true, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false +}; + //indexed by funct static bool mul_div_flag[64] = { false, false, false, false, false, false, false, false, diff --git a/Makefile b/Makefile index 7cc2e23..2f543b2 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,10 @@ # Config SYSCONFDIR = "." -DEFS = -DHAVE_CONFIG_H DEFAULT_INCLUDES = -I. INCLUDES = EXEEXT = PACKAGE = cube_sim +DEFS = -DHAVE_CONFIG_H MAKE = make # commands & flags @@ -39,7 +39,7 @@ SOURCES = cpu.cc cpzero.cc devicemap.cc \ types.h endiantest.h fileutils.h fpu.h interactor.h testdev.h \ rs232c.h cache.h busarbiter.h routerinterface.cc routerinterface.h router.cc router.h \ accelerator.h accelerator.cc acceleratorcore.h acceleratorcore.cc \ - remoteram.h remoteram.cc + remoteram.h remoteram.cc cma.h cma.cc cmacore.cc cmacore.h cmaAddressMap.h OBJECTS = cpu.$(OBJEXT) cpzero.$(OBJEXT) devicemap.$(OBJEXT) \ mapper.$(OBJEXT) options.$(OBJEXT) range.$(OBJEXT) \ @@ -53,6 +53,7 @@ OBJECTS = cpu.$(OBJEXT) cpzero.$(OBJEXT) devicemap.$(OBJEXT) \ testdev.$(OBJEXT) rs232c.$(OBJEXT) cache.$(OBJEXT) busarbiter.$(OBJEXT) \ routerinterface.${OBJEXT} router.${OBJEXT} \ remoteram.${OBJEXT} accelerator.${OBJEXT} \ + cma.${OBJEXT} cmacore.${OBJEXT} LDADD = libopcodes_mips/libopcodes_mips.a @@ -91,7 +92,7 @@ cpu.o: cpu.cc cpu.h deviceexc.h accesstypes.h types.h config.h state.h \ options.h \ excnames.h error.h gccattr.h remotegdb.h fileutils.h stub-dis.h \ libopcodes_mips/bfd.h libopcodes_mips/ansidecl.h \ - libopcodes_mips/symcat.h libopcodes_mips/dis-asm.h ISA.h + libopcodes_mips/symcat.h libopcodes_mips/dis-asm.h ISA.h cacheinstr.h cpzero.o: cpzero.cc cpzero.h tlbentry.h config.h cpzeroreg.h types.h \ mapper.h range.h accesstypes.h \ @@ -217,7 +218,7 @@ rs232c.o: rs232c.cc rs232c.h deviceint.h intctrl.h types.h config.h \ cache.o: cache.cc cache.h \ types.h config.h deviceexc.h accesstypes.h state.h vmips.h \ mapper.h range.h \ - excnames.h + excnames.h cacheinstr.h busarbiter.o: busarbiter.cc busarbiter.h @@ -231,3 +232,9 @@ accelerator.o: accelerator.h accelerator.cc acceleratorcore.h range.h\ router.h error.h options.h vmips.h remoteram.o: remoteram.cc remoteram.h accelerator.h memorymodule.h + +cma.o: cma.cc cma.h accelerator.h memorymodule.h accesstypes.h\ + types.h cmacore.h cmaAddressMap.h + +cmacore.o: cmacore.h cmacore.cc cmaAddressMap.h memorymodule.h \ + accelerator.h acceleratorcore.h diff --git a/accelerator.cc b/accelerator.cc index 3f668f6..ae1f9bd 100644 --- a/accelerator.cc +++ b/accelerator.cc @@ -50,9 +50,9 @@ Range * LocalMapper::find_mapping_range(uint32 laddr) uint32 LocalMapper::fetch_word(uint32 laddr) { Range *l = find_mapping_range(laddr); - uint32 offset = laddr - l->getBase(); if (l != NULL) { + uint32 offset = laddr - l->getBase(); return l->fetch_word(offset, DATALOAD, NULL); } else { if (machine->opt->option("dbemsg")->flag) { @@ -65,9 +65,9 @@ uint32 LocalMapper::fetch_word(uint32 laddr) void LocalMapper::store_word(uint32 laddr, uint32 data) { Range *l = find_mapping_range(laddr); - uint32 offset = laddr - l->getBase(); if (l != NULL) { + uint32 offset = laddr - l->getBase(); l->store_word(offset, data, NULL); } else { if (machine->opt->option("dbemsg")->flag) { @@ -147,8 +147,8 @@ void NetworkInterfaceConfig::store_word(uint32 offset, uint32 data, DeviceExc *c } /******************************* CubeAccelerator *******************************/ -CubeAccelerator::CubeAccelerator(uint32 node_ID, Router* upperRouter, uint32 config_addr_base, bool dmac_en_) - : dmac_en(dmac_en_) +CubeAccelerator::CubeAccelerator(uint32 node_ID_, Router* upperRouter, uint32 config_addr_base, bool dmac_en_) + : node_ID(node_ID_), dmac_en(dmac_en_) { //make router ports rtRx = new RouterPortSlave(iready); //receiver @@ -166,6 +166,8 @@ CubeAccelerator::CubeAccelerator(uint32 node_ID, Router* upperRouter, uint32 con nif_config = new NetworkInterfaceConfig(config_addr_base); localBus->map_at_local_address(nif_config, config_addr_base); + done_signal_ptr = std::bind(&CubeAccelerator::done_signal, this, std::placeholders::_1); + } void CubeAccelerator::nif_step() @@ -301,7 +303,7 @@ void CubeAccelerator::nif_step() case CNIF_DONE: if(rtTx->slaveReady(nif_config->getVCdone())) { RouterUtils::make_head_flit(&sflit, DONE_NOTIF_ADDR, MTYPE_DONE, - nif_config->getVCdone(), reg_dst, 0, true); + nif_config->getVCdone(), node_ID, 0, true); rtTx->send(&sflit, nif_config->getVCdone()); if (dma_after_done_en & (nif_config->getDMAlen() > 0)) { nif_next_state = CNIF_DMA_HEAD; @@ -364,4 +366,4 @@ void CubeAccelerator::done_signal(bool dma_enable) { done_pending = true; dma_after_done_en = dma_enable; -} \ No newline at end of file +} diff --git a/accelerator.h b/accelerator.h index a36d76d..a45713c 100644 --- a/accelerator.h +++ b/accelerator.h @@ -117,10 +117,8 @@ class CubeAccelerator { RouterPortMaster *rtTx; Router *localRouter; - //submodules - AcceleratorCore *core_module; - //Cube nif + int node_ID; NetworkInterfaceConfig* nif_config; uint32 reg_mema, reg_mtype, reg_vch, reg_src, reg_dst; int dcount; @@ -136,12 +134,17 @@ class CubeAccelerator { protected: //constructor - CubeAccelerator(uint32 node_ID, Router* upperRouterm, + CubeAccelerator(uint32 node_ID_, Router* upperRouter, uint32 config_addr_base = NIF_CONFIG_BASE, bool dmac_en_ = true); //data/address bus LocalMapper* localBus; + //submodules + AcceleratorCore *core_module; + + SIGNAL_PTR done_signal_ptr; + public: //destructor virtual ~CubeAccelerator() {}; diff --git a/acceleratorcore.cc b/acceleratorcore.cc old mode 100644 new mode 100755 diff --git a/acceleratorcore.h b/acceleratorcore.h index c5cc945..d81d6d8 100644 --- a/acceleratorcore.h +++ b/acceleratorcore.h @@ -1,10 +1,24 @@ #ifndef _ACCELERATORCORE_H_ #define _ACCELERATORCORE_H_ +#include +#include "accelerator.h" + +typedef std::function SIGNAL_PTR; + +class LocalMapper; +class CubeAccelerator; + class AcceleratorCore { private: +protected: + LocalMapper *bus; + SIGNAL_PTR done_signal; + public: + AcceleratorCore(LocalMapper *bus_, SIGNAL_PTR done_signal_) + : bus(bus_), done_signal(done_signal_) {}; virtual void step() = 0; virtual void reset() = 0; }; diff --git a/cache.cc b/cache.cc index 4c8bcc3..489fcfd 100644 --- a/cache.cc +++ b/cache.cc @@ -50,7 +50,7 @@ void Cache::step() last_state_update_time = machine->num_cycles; } - if (status == CACHE_WB) { + if (status == CACHE_WB || status == CACHE_OP_WB) { cache_wb(); } else if (status == CACHE_FETCH) { cache_fetch(); @@ -115,7 +115,7 @@ void Cache::request_block(uint32 addr, int mode, DeviceExc* client) //if cache is working or bus is busy, request is ignored if (status == CACHE_IDLE && physmem->acquire_bus(client)) { - //find free block and LRU block + //find free block or LRU block for (way = 0; way < way_size; way++) { if (blocks[least_recent_used_way][index].last_access > blocks[way][index].last_access) { @@ -148,7 +148,7 @@ void Cache::request_block(uint32 addr, int mode, DeviceExc* client) } #endif // regist replaced cache block & status - cache_op_state = new CacheOpState{word_size, addr, way, index, mode, client}; + cache_op_state = new CacheOpState{word_size, addr, way, index, mode, false, client}; cache_miss_counts++; } } @@ -176,8 +176,19 @@ void Cache::cache_wb() if (--cache_op_state->counter == 0) { //finish write back - next_status = CACHE_FETCH; - cache_op_state->counter = word_size; + if (status == CACHE_OP_WB) { + //no need to fetch block + blocks[way][index].dirty = false; + if (cache_op_state->last_invalidate) { + blocks[way][index].valid = false; + } + next_status = CACHE_IDLE; + delete cache_op_state; + physmem->release_bus(cache_op_state->client); + } else { + next_status = CACHE_FETCH; + cache_op_state->counter = word_size; + } cache_wb_counts++; } } @@ -220,6 +231,123 @@ void Cache::cache_fetch() } } +bool Cache::exec_cache_op(uint16 opcode, uint32 addr, DeviceExc* client) +{ + uint32 tag, index, way, offset; + uint32 least_recent_used_way = 0; + int mode = DATALOAD; + bool last_invalidate = false; + bool stall = false; + bool find; + + //if it causes cpu stall, return false + if (status == CACHE_IDLE && physmem->acquire_bus(client)) { + switch (opcode) { + //invalidate by index + case ICACHE_OP_IDX_INV: + mode = INSTFETCH; + case DCACHE_OP_IDX_INV: + fprintf(stderr, "cache index invalidate not implemented\n"); + break; + //write back & invalidate by index + case DCACHE_OP_IDX_WB: + fprintf(stderr, "cache index writeback not implemented\n"); + break; + case DCACHE_OP_IDX_WBINV: + fprintf(stderr, "cache index writeback, invalidate not implemented\n"); + break; + //load tag by index + case ICACHE_OP_IDX_LTAG: + mode = INSTFETCH; + case DCACHE_OP_IDX_LTAG: + fprintf(stderr, "cache tag load not implemented\n"); + break; + //store tag by inedx + case ICACHE_OP_IDX_STAG: + mode = INSTFETCH; + case DCACHE_OP_IDX_STAG: + fprintf(stderr, "cache tag store not implemented\n"); + break; + //force write back by index + case DCACHE_OP_IDX_FWB: + fprintf(stderr, "cache index force writeback not implemented\n"); + break; + //force write back & invalidate by index + case DCACHE_OP_IDX_FWBINV: + fprintf(stderr, "cache index force writeback, invalidate not implemented\n"); + break; + //setline + case DCACHE_OP_SETLINE: + if (!cache_hit(addr, index, way, offset)) { + addr_separete(addr, tag, index, offset); + //find free block or oldest block + for (way = 0, find = false; way < way_size; way++) { + if (!blocks[way][index].valid) { + find = true; + break; + } + if (blocks[least_recent_used_way][index].last_access > + blocks[way][index].last_access) { + //update + least_recent_used_way = way; + } + } + if (!find) { + way = least_recent_used_way; + if (blocks[way][index].dirty) { + next_status = CACHE_OP_WB; + } + } else { + blocks[way][index].valid = true; + //overwrite tag + blocks[way][index].tag = tag; + blocks[way][index].dirty = false; + } + } + break; + //invalidate by cache hit + case ICACHE_OP_HIT_INV: + mode = INSTFETCH; + case DCACHE_OP_HIT_INV: + if (cache_hit(addr, index, way, offset)) { + blocks[way][index].valid = false; + } + break; + //(force) write back (&invalidate) by cache hit + case DCACHE_OP_HIT_WBINV: + case DCACHE_OP_HIT_FWBINV: + last_invalidate = true; + case DCACHE_OP_HIT_WB: + case DCACHE_OP_HIT_FWB: + if (cache_hit(addr, index, way, offset)) { + if (blocks[way][index].dirty) { + next_status = CACHE_OP_WB; + } else if (opcode == DCACHE_OP_HIT_FWB || opcode == DCACHE_OP_HIT_INV) { + next_status = CACHE_OP_WB; + } + } + break; + //change + case DCACHE_OP_CHANGE: + fprintf(stderr, "cache change not implemented\n"); + break; + //reverse change + case DCACHE_OP_RCHANGE: + fprintf(stderr, "cache reverse change not implemented\n"); + break; + } + if (next_status == CACHE_OP_WB) { + cache_op_state = new CacheOpState{word_size, addr, way, index, mode, last_invalidate, client}; + stall = true; + } + } else { + //cache is working + stall = true; + } + + return !stall; +} + uint32 Cache::fetch_word(uint32 addr, int32 mode, DeviceExc *client) { uint32 offset; diff --git a/cache.h b/cache.h index cc7acab..bbd942c 100644 --- a/cache.h +++ b/cache.h @@ -7,10 +7,12 @@ #include "deviceexc.h" #include "vmips.h" #include "mapper.h" +#include "cacheinstr.h" #define CACHE_IDLE 0 #define CACHE_WB 1 #define CACHE_FETCH 2 +#define CACHE_OP_WB 3 class Mapper; @@ -42,6 +44,8 @@ class Cache { void cache_isolate(bool flag) {isisolated = flag;} void report_prof(); + bool exec_cache_op(uint16 opcode, uint32 addr, DeviceExc* client); + private: // connected memory Mapper* physmem; @@ -83,6 +87,7 @@ class Cache { uint32 way; uint32 index; int mode; + bool last_invalidate; DeviceExc *client; }; diff --git a/cacheinstr.h b/cacheinstr.h new file mode 100644 index 0000000..5f79c29 --- /dev/null +++ b/cacheinstr.h @@ -0,0 +1,31 @@ +#ifndef _CACHEINSTR_H_ +#define _CACHEINSTR_H_ + +/* for cache op */ +#define DCACHE_OPCODE_START 0x10 + +/* function of cache operation */ +/* for inst cache */ +#define ICACHE_OP_IDX_INV 0x01 //index invalidate +#define ICACHE_OP_HIT_INV 0x09 //hit invalidate +#define ICACHE_OP_IDX_LTAG 0x04 //index load tag +#define ICACHE_OP_IDX_STAG 0x05 //index store tag + +/* for data cache */ +#define DCACHE_OP_IDX_INV 0x11 //index invalidate +#define DCACHE_OP_IDX_WB 0x12 //index write back +#define DCACHE_OP_IDX_WBINV 0x13 //index write back & invalidate +#define DCACHE_OP_IDX_LTAG 0x14 //index load tag +#define DCACHE_OP_IDX_STAG 0x15 //index store tag +#define DCACHE_OP_IDX_FWB 0x16 //index force write back +#define DCACHE_OP_IDX_FWBINV 0x17 //index force write back & invalidate +#define DCACHE_OP_SETLINE 0x18 //set line +#define DCACHE_OP_HIT_INV 0x19 //hit invalidate +#define DCACHE_OP_HIT_WB 0x1A //hit write back +#define DCACHE_OP_HIT_WBINV 0x1B //hit write back & invalidate +#define DCACHE_OP_CHANGE 0x1C //change +#define DCACHE_OP_RCHANGE 0x1D //reverse change +#define DCACHE_OP_HIT_FWB 0x1E //hit force write back +#define DCACHE_OP_HIT_FWBINV 0x1F //hit force write back & invalidate + +#endif //_CACHEINSTR_H_ \ No newline at end of file diff --git a/cma.cc b/cma.cc new file mode 100644 index 0000000..c4d9f5f --- /dev/null +++ b/cma.cc @@ -0,0 +1,39 @@ +#include "cma.h" + +using namespace CMAComponents; + +CMA::CMA(uint32 node_ID, Router* upperRouter) + : CubeAccelerator(node_ID, upperRouter) +{ + dmem_front = new CMAMemoryModule(CMA_DBANK0_SIZE, CMA_DWORD_MASK); + dmem_back = new CMAMemoryModule(CMA_DBANK1_SIZE, CMA_DWORD_MASK); + imem = new CMAMemoryModule(CMA_IMEM_SIZE, CMA_IWORD_MASK); + const_reg = new CMAMemoryModule(CMA_CONST_SIZE, CMA_DWORD_MASK); + ld_tbl = new CMAMemoryModule(CMA_LD_TABLE_SIZE, CMA_TABLE_WORD_MASK); + st_tbl = new CMAMemoryModule(CMA_ST_TABLE_SIZE, CMA_TABLE_WORD_MASK); + ctrl_reg = new ControlReg(); + node = node_ID; +} + +CMA::~CMA() +{ + delete dmem_front; + delete dmem_back; + delete imem; + delete const_reg; + delete ld_tbl; + delete st_tbl; +} + +void CMA::setup() +{ + localBus->map_at_local_address(dmem_front, CMA_DBANK0_ADDR); + localBus->map_at_local_address(dmem_back, CMA_DBANK1_ADDR); + localBus->map_at_local_address(imem, CMA_IMEM_ADDR); + localBus->map_at_local_address(const_reg, CMA_CONST_ADDR); + localBus->map_at_local_address(ld_tbl, CMA_LD_TABLE_ADDR); + localBus->map_at_local_address(st_tbl, CMA_ST_TABLE_ADDR); + localBus->map_at_local_address(ctrl_reg, CMA_CTRL_ADDR); + //confCtrl = new ConfigController(localBus); + core_module = new CMACore(localBus, done_signal_ptr, ctrl_reg, node); +} \ No newline at end of file diff --git a/cma.h b/cma.h new file mode 100644 index 0000000..0f97f50 --- /dev/null +++ b/cma.h @@ -0,0 +1,35 @@ +#ifndef _CMA_H_ +#define _CMA_H_ + +#include "accelerator.h" +#include "memorymodule.h" +#include "accesstypes.h" +#include "types.h" +#include "cmacore.h" +#include "cmaAddressMap.h" + +class DeviceExc; +class CubeAccelerator; +class MemoryModule; +class LocalMapper; + +class CMA : public CubeAccelerator { +private: + CMAComponents::CMAMemoryModule *dmem_front, *dmem_back, *imem, *const_reg; + CMAComponents::CMAMemoryModule *ld_tbl, *st_tbl; + CMAComponents::ConfigController *confCtrl; + + int node; + +public: + CMA(uint32 node_ID, Router* upperRouter); + ~CMA(); + + void setup(); + const char *accelerator_name() { return "CMA"; } + + CMAComponents::ControlReg *ctrl_reg; +}; + + +#endif //_CMA_H_ diff --git a/cmaAddressMap.h b/cmaAddressMap.h new file mode 100644 index 0000000..b53088f --- /dev/null +++ b/cmaAddressMap.h @@ -0,0 +1,48 @@ +#ifndef _CMAADDRESSMAP_H_ +#define _CMAADDRESSMAP_H_ + +/* Address map*/ +#define CMA_DBANK0_ADDR 0x000000 +#define CMA_DBANK1_ADDR 0x001000 +#define CMA_IMEM_ADDR 0x002000 +#define CMA_CONST_ADDR 0x003000 +#define CMA_CTRL_ADDR 0x004000 +#define CMA_LD_TABLE_ADDR 0x005000 +#define CMA_ST_TABLE_ADDR 0x006000 +#define CMA_ALU_RMC_ADDR 0x200000 +#define CMA_SE_RMC_ADDR 0x210000 +#define CMA_PREG_CONF_ADDR 0x260000 +#define CMA_PE_CONF_ADDR 0x280000 + +/* Address space for each module */ +#define CMA_DBANK0_SIZE 0x1000 +#define CMA_DBANK1_SIZE 0x1000 +#define CMA_IMEM_SIZE 0x400 +#define CMA_CONST_SIZE 0x40 +#define CMA_LD_TABLE_SIZE 0x100 +#define CMA_ST_TABLE_SIZE 0x100 +#define CMA_ALU_RMC_SIZE 0x10 //for block trans +#define CMA_SE_RMC_SIZE 0x10 //for block trans +#define CMA_CTRL_SIZE 0x4 //just one word +#define CMA_PREG_CONF_SIZE 0x4 //just one word +#define CMA_PE_CONF_SIZE 0xC000 //PE addr [15:9] + +/* word size */ +#define CMA_DWORD_MASK 0x1FFFFFF //25bit +#define CMA_IWORD_MASK 0xFFFF //16bit +#define CMA_TABLE_WORD_MASK 0xFFFFFF //24bit +#define CMA_ALU_RMC_MASK 0x3FFFFFFF //30bit (8bit row, 12bit col, 10bit conf) +#define CMA_SE_RMC_MASK 0x3FFFFFFF //30bit (8bit row, 12bit col, 10bit conf) +#define CMA_PE_CONF_MASK 0x000FFFFF //20bit + +/* for controller */ +#define CMA_CTRL_DONEDMA_BIT 0x10 +#define CMA_CTRL_DONEDMA_LSB 4 +#define CMA_CTRL_RESTART_BIT 0x08 //not used +#define CMA_CTRL_RESTART_LSB 3 +#define CMA_CTRL_BANKSEL_MASK 0x04 +#define CMA_CTRL_BANKSEL_LSB 2 +#define CMA_CTRL_RUN_BIT 0x02 +#define CMA_CTRL_RUN_LSB 1 + +#endif //_CMAADDRESSMAP_H_ diff --git a/cmacore.cc b/cmacore.cc new file mode 100644 index 0000000..41b18e4 --- /dev/null +++ b/cmacore.cc @@ -0,0 +1,173 @@ +#include "cmacore.h" + +#define CMA_COUNT 1 + +using namespace CMAComponents; + +void CMAMemoryModule::store_word(uint32 offset, uint32 data, DeviceExc *client) +{ + uint32 *werd; + /* calculate address */ + werd = ((uint32 *) address) + (offset / 4); + /* store word */ + *werd = data & mask; +} + +ConfigController::ConfigController(LocalMapper *bus) +{ + rmc_alu = new Range (0, CMA_ALU_RMC_SIZE, 0, MEM_READ_WRITE); + bus->map_at_local_address(rmc_alu, CMA_ALU_RMC_ADDR); + rmc_se = new Range (0, CMA_SE_RMC_SIZE, 0, MEM_READ_WRITE); + bus->map_at_local_address(rmc_se, CMA_SE_RMC_ADDR); + pe_config = new Range (0, CMA_PREG_CONF_SIZE, 0, MEM_READ_WRITE); + bus->map_at_local_address(pe_config, CMA_PREG_CONF_ADDR); + preg_config = new Range (0, CMA_PE_CONF_SIZE, 0, MEM_READ_WRITE); + bus->map_at_local_address(preg_config, CMA_PE_CONF_ADDR); +} + +void ControlReg::store_word(uint32 offset, uint32 data, DeviceExc *client) +{ + donedma = (data & CMA_CTRL_DONEDMA_BIT) != 0; + run = (data & CMA_CTRL_RUN_BIT) != 0; + bank_sel = (data & CMA_CTRL_BANKSEL_MASK) >> CMA_CTRL_BANKSEL_LSB; +} + +uint32 ControlReg::fetch_word(uint32 offset, int mode, DeviceExc *client) +{ + return ((donedma ? 1 : 0) << CMA_CTRL_DONEDMA_LSB ) | + (bank_sel << CMA_CTRL_BANKSEL_LSB) | + ((run ? 1 : 0) << CMA_CTRL_RUN_LSB); +} + + +void CMACore::step() +{ + if (ctrl->getRun()) { + count++; + if (count == result_stat[context].wait) { + for (int i = 0; i < result_stat[context].len; i++) { + if (result_stat[context].bank0) { + bus->store_word(result_stat[context].result_addr + 4 * i, result_stat[context].result[i]); + } else { + bus->store_word(0x1000 + result_stat[context].result_addr + 4 * i, result_stat[context].result[i]); + } + } + done_signal(ctrl->getDoneDMA()); + context++; + } + } else { + count = 0; + } +} + +void CMACore::reset() +{ + count = 0; + context = 0; + +#if CMA_COUNT == 1 + result_stat[0] = {0x02C0, true, &comp_y[0], 74, 176}; + result_stat[1] = {0x02C0, false, &comp_y[176], 74, 176}; + result_stat[2] = {0x02C0, true, &comp_cr[0], 74, 176}; + result_stat[3] = {0x02C0, false, &comp_cr[176], 74, 176}; + result_stat[4] = {0x02C0, true, &comp_cb[0], 74, 176}; + result_stat[5] = {0x02C0, false, &comp_cb[176], 74, 176}; + result_stat[6] = {0x40, true, &comp_dct[0], 31, 64}; + result_stat[7] = {0x40, false, &comp_dct[64], 31, 64}; + result_stat[8] = {0x40, true, &comp_dct[128], 31, 64}; + result_stat[9] = {0x40, false, &comp_dct[192], 31, 64}; + result_stat[10] = {0x40, true, &comp_dct[256], 31, 64}; + result_stat[11] = {0x40, false, &comp_dct[320], 31, 64}; + result_stat[12] = {0x40, true, &comp_dct[384], 31, 64}; + result_stat[13] = {0x40, false, &comp_dct[448], 31, 64}; + result_stat[14] = {0x40, true, &comp_dct[512], 31, 64}; + result_stat[15] = {0x40, false, &comp_dct[576], 31, 64}; + result_stat[16] = {0x40, true, &comp_dct[640], 31, 64}; + result_stat[17] = {0x40, false, &comp_dct[704], 31, 64}; + result_stat[18] = {0x300, true, &comp_dct_quant[0], 31, 64}; + result_stat[19] = {0x300, true, &comp_dct_quant[64], 31, 64}; + result_stat[20] = {0x300, true, &comp_dct_quant[128], 31, 64}; + result_stat[21] = {0x300, true, &comp_dct_quant[192], 31, 64}; + result_stat[22] = {0x300, true, &comp_dct_quant[256], 31, 64}; + result_stat[23] = {0x300, true, &comp_dct_quant[320], 31, 64}; + result_stat[24] = {0x300, true, &comp_dct_quant[384], 31, 64}; + result_stat[25] = {0x300, true, &comp_dct_quant[448], 31, 64}; + result_stat[26] = {0x300, true, &comp_dct_quant[512], 31, 64}; + result_stat[27] = {0x300, true, &comp_dct_quant[576], 31, 64}; + result_stat[28] = {0x300, true, &comp_dct_quant[640], 31, 64}; + result_stat[29] = {0x300, true, &comp_dct_quant[704], 31, 64}; + +#elif CMA_COUNT == 2 + if (node == 1) { + result_stat[0] = {0x02C0, true, &comp_y[0], 74, 176}; + result_stat[1] = {0x02C0, false, &comp_y[176], 74, 176}; + result_stat[2] = {0x02C0, true, &comp_cr[0], 74, 176}; + result_stat[3] = {0x02C0, false, &comp_cr[176], 74, 176}; + result_stat[4] = {0x02C0, true, &comp_cb[0], 74, 176}; + result_stat[5] = {0x02C0, false, &comp_cb[176], 74, 176}; + result_stat[6] = {0x40, true, &comp_dct[0], 31, 64}; + result_stat[7] = {0x40, true, &comp_dct[64], 31, 64}; + result_stat[8] = {0x40, true, &comp_dct[128], 31, 64}; + result_stat[9] = {0x40, true, &comp_dct[192], 31, 64}; + result_stat[10] = {0x40, false, &comp_dct[256], 31, 64}; + result_stat[11] = {0x40, false, &comp_dct[320], 31, 64}; + result_stat[12] = {0x40, true, &comp_dct[384], 31, 64}; + result_stat[13] = {0x40, true, &comp_dct[448], 31, 64}; + result_stat[14] = {0x40, true, &comp_dct[512], 31, 64}; + result_stat[15] = {0x40, true, &comp_dct[576], 31, 64}; + result_stat[16] = {0x40, false, &comp_dct[640], 31, 64}; + result_stat[17] = {0x40, false, &comp_dct[704], 31, 64}; + } else if (node == 2) { + result_stat[0] = {0x300, true, &comp_dct_quant[0], 31, 64}; + result_stat[1] = {0x300, true, &comp_dct_quant[64], 31, 64}; + result_stat[2] = {0x300, true, &comp_dct_quant[128], 31, 64}; + result_stat[3] = {0x300, true, &comp_dct_quant[192], 31, 64}; + result_stat[4] = {0x300, false, &comp_dct_quant[256], 31, 64}; + result_stat[5] = {0x300, false, &comp_dct_quant[320], 31, 64}; + result_stat[6] = {0x300, true, &comp_dct_quant[384], 31, 64}; + result_stat[7] = {0x300, true, &comp_dct_quant[448], 31, 64}; + result_stat[8] = {0x300, true, &comp_dct_quant[512], 31, 64}; + result_stat[9] = {0x300, true, &comp_dct_quant[576], 31, 64}; + result_stat[10] = {0x300, false, &comp_dct_quant[640], 31, 64}; + result_stat[11] = {0x300, false, &comp_dct_quant[704], 31, 64}; + } + +#elif CMA_COUNT == 3 + //for 3 chips + if (node == 1) { + result_stat[0] = {0x02C0, true, &comp_y[0], 74, 176}; + result_stat[1] = {0x02C0, false, &comp_y[176], 74, 176}; + result_stat[2] = {0x40, true, &comp_dct[0], 31, 64}; + result_stat[3] = {0x40, false, &comp_dct[64], 31, 64}; + result_stat[4] = {0x40, true, &comp_dct[128], 31, 64}; + result_stat[5] = {0x40, false, &comp_dct[192], 31, 64}; + result_stat[6] = {0x40, true, &comp_dct[256], 31, 64}; + result_stat[7] = {0x40, false, &comp_dct[320], 31, 64}; + result_stat[8] = {0x40, true, &comp_dct[384], 31, 64}; + result_stat[9] = {0x40, false, &comp_dct[448], 31, 64}; + result_stat[10] = {0x40, true, &comp_dct[512], 31, 64}; + result_stat[11] = {0x40, false, &comp_dct[576], 31, 64}; + result_stat[12] = {0x40, true, &comp_dct[640], 31, 64}; + result_stat[13] = {0x40, false, &comp_dct[704], 31, 64}; + result_stat[14] = {0x300, true, &comp_dct_quant[0], 31, 64}; + result_stat[15] = {0x300, true, &comp_dct_quant[64], 31, 64}; + result_stat[16] = {0x300, true, &comp_dct_quant[128], 31, 64}; + result_stat[17] = {0x300, true, &comp_dct_quant[192], 31, 64}; + result_stat[18] = {0x300, true, &comp_dct_quant[256], 31, 64}; + result_stat[19] = {0x300, true, &comp_dct_quant[320], 31, 64}; + result_stat[20] = {0x300, true, &comp_dct_quant[384], 31, 64}; + result_stat[21] = {0x300, true, &comp_dct_quant[448], 31, 64}; + result_stat[22] = {0x300, true, &comp_dct_quant[512], 31, 64}; + result_stat[23] = {0x300, true, &comp_dct_quant[576], 31, 64}; + result_stat[24] = {0x300, true, &comp_dct_quant[640], 31, 64}; + result_stat[25] = {0x300, true, &comp_dct_quant[704], 31, 64}; + } else if (node == 2) { + result_stat[0] = {0x02C0, true, &comp_cr[0], 74, 176}; + result_stat[1] = {0x02C0, false, &comp_cr[176], 74, 176}; + } else if (node == 3) { + result_stat[0] = {0x02C0, true, &comp_cb[0], 74, 176}; + result_stat[1] = {0x02C0, false, &comp_cb[176], 74, 176}; + } +#endif + +} diff --git a/cmacore.h b/cmacore.h new file mode 100644 index 0000000..65e15d6 --- /dev/null +++ b/cmacore.h @@ -0,0 +1,1976 @@ +#ifndef _CMACORE_H_ +#define _CMACORE_H_ + +#include "cmaAddressMap.h" +#include "accelerator.h" +#include "acceleratorcore.h" +#include "memorymodule.h" + +/* PE Array */ +#define CMA_PE_ARRAY_WIDTH 12 +#define CMA_PE_ARRAY_HEIGHT 8 + + +struct result_stat_t { + int result_addr; + bool bank0; + unsigned int *result; + int wait; + int len; +}; + +class AcceleratorCore; +class LocalMapper; + +namespace CMAComponents { + class CMAMemoryModule : public MemoryModule { + int mask; + public: + //constructor + CMAMemoryModule(size_t size, int mask_) : MemoryModule(size), mask(mask_) {}; + + void store_word(uint32 offset, uint32 data, DeviceExc *client); + }; + + class ConfigController { + private: + Range *rmc_alu, *rmc_se, *pe_config, *preg_config; + public: + ConfigController(LocalMapper *bus); + ~ConfigController() {}; + }; + + class ControlReg : public Range { + private: + bool donedma, run; + int bank_sel; + public: + ControlReg() : Range(0, CMA_CTRL_SIZE, 0, MEM_READ_WRITE), donedma(false), + run(false), bank_sel(false) {} + bool getDoneDMA() { return donedma; }; + bool getRun() { return run; }; + int getBankSel() { return bank_sel; }; + + void store_word(uint32 offset, uint32 data, DeviceExc *client); + uint32 fetch_word(uint32 offset, int mode, DeviceExc *client); + }; + + class MicroController { + + }; + + class PEArray { + + }; + + class PE { + + }; + + class LDUnit { + + }; + + class STUnit { + + }; + +} + +class CMACore : public AcceleratorCore { +private: + CMAComponents::ControlReg *ctrl; + //ese emulation + int count; + int context; + result_stat_t result_stat[30]; + int node; +public: + CMACore(LocalMapper *bus_, SIGNAL_PTR done_signal_, CMAComponents::ControlReg *ctrl_, int node_) + : AcceleratorCore(bus_, done_signal_), ctrl(ctrl_), node(node_) {}; + virtual void step(); + virtual void reset(); +}; + +static unsigned int comp_y[345] = { + 0x2E,0x2F,0x2F,0x2F,0x2F,0x30,0x36,0x3D,0x48,0x61,0x74,0x62,0x59,0x52,0x58,0x65, + 0x39,0x31,0x2F,0x41,0x76,0x5C,0x67,0x2F,0x2E,0x2B,0x2B,0x2D,0x2E,0x34,0x36,0x35, + 0x45,0x5C,0x56,0x50,0x4D,0x5C,0x8F,0x67,0x2C,0x26,0x30,0x89,0x9C,0x70,0x3A,0x40, + 0x3A,0x31,0x33,0x3A,0x3F,0x38,0x48,0x4F,0x57,0x59,0x5A,0x63,0x6E,0x83,0x88,0x6D, + 0x47,0x4A,0x86,0x9F,0x66,0x34,0x3F,0x59,0x6B,0x40,0x37,0x42,0x45,0x5D,0x62,0x62, + 0x69,0x68,0x6B,0x6E,0x67,0x79,0x84,0x83,0x9F,0xEF,0xEB,0xB2,0x40,0x39,0x62,0xBB, + 0xA0,0x65,0x69,0x6E,0x60,0x66,0x67,0x68,0x66,0x68,0x6E,0x63,0x71,0x8A,0x8F,0x8F, + 0xF8,0xFD,0xF8,0x4F,0x4B,0x52,0x84,0x8E,0x7B,0x6E,0x69,0x64,0x66,0x67,0x68,0x67, + 0x67,0x6A,0x66,0x5C,0x8D,0x96,0x86,0xC0,0xC6,0xD7,0x4F,0x4F,0x51,0x68,0x8D,0x70, + 0x60,0x68,0x6A,0x6D,0x6A,0x76,0x6B,0x6E,0x64,0x6B,0x64,0x89,0x8C,0x70,0x8A,0x95, + 0x9B,0x53,0x59,0x6E,0xA4,0xBA,0x7D,0x74,0x6A,0x6B,0x69,0x7B,0x73,0x7A,0x6E,0x6C, + 0x6B,0x66,0x7F,0x73,0x54,0x86,0x85,0x6A,0x3D,0x61,0x81,0xA1,0x86,0x64,0x8E,0x67, + 0x66,0x63,0x65,0x6D,0x6B,0x6A,0x6C,0x67,0x67,0x7B,0x49,0x70,0x7E,0x76,0x74,0x3F, + 0x54,0x7D,0x72,0x64,0x63,0x66,0x65,0x5F,0x66,0x69,0x6C,0x70,0x6D,0x6F,0x5C,0x61, + 0x6F,0x60,0x6C,0x6D,0x81,0x87,0x61,0x60,0x61,0x57,0x3F,0x66,0x71,0x68,0x61,0x6A, + 0x63,0x55,0x5C,0x68,0x5D,0x4C,0x58,0x6F,0x58,0x32,0x6F,0x8E,0x7A,0x62,0x63,0x63, + 0x6A,0x78,0x54,0x5D,0x69,0x70,0x72,0x55,0x4D,0x4C,0x4D,0x49,0x42,0x5E,0x5C,0x48, + 0x36,0x69,0x82,0x6E,0x63,0x65,0x5D,0xA0,0xFF,0x9E,0x66,0xD4,0x83,0x60,0x59,0x4C, + 0x4C,0x46,0x44,0x48,0x4A,0x35,0x35,0x35,0x57,0x6C,0x5F,0x64,0x64,0x66,0xDA,0xFD, + 0xD9,0xE7,0xFF,0xF6,0xAA,0x5F,0x4A,0x4A,0x48,0x46,0x5B,0x3C,0x32,0x32,0x2F,0x37, + 0x4D,0x47,0x65,0x66,0x67,0xDE,0xE6,0xDB,0xFF,0xFB,0xFD,0xFF,0xED,0x9C,0x46,0x4E, + 0x51,0x57,0x42,0x3D,0x3D,0x38,0x37,0x48,0x40 +}; + +static unsigned int comp_cb[345] = { + 0x7F,0x7E,0x7E,0x7E,0x7E,0x7D,0x7C,0x79,0x73,0x68,0x63,0x64,0x67,0x6A,0x6A,0x6C, + 0x7D,0x7E,0x7F,0x7A,0x97,0x8E,0x7A,0x7F,0x7E,0x80,0x81,0x80,0x7E,0x7D,0x7C,0x7C, + 0x73,0x6A,0x6B,0x6B,0x6E,0x71,0x75,0x78,0x7D,0x81,0x7E,0x79,0x76,0x76,0x7D,0x7D, + 0x7B,0x79,0x7B,0x7B,0x76,0x7B,0x78,0x70,0x6D,0x6C,0x6C,0x6D,0x6F,0x6D,0x70,0x76, + 0x7A,0x78,0x70,0x74,0x77,0x7E,0x79,0x7E,0x8B,0x80,0x79,0x7D,0x7B,0x66,0x62,0x64, + 0x60,0x5C,0x61,0x65,0x64,0x6A,0x79,0x73,0x75,0x83,0x80,0x7C,0x7A,0x77,0x84,0xA6, + 0xA5,0x8B,0x75,0x6C,0x62,0x61,0x60,0x5D,0x5F,0x5F,0x64,0x63,0x66,0x6E,0x6F,0x73, + 0x80,0x7D,0x79,0x76,0x76,0x7A,0x99,0x99,0x6F,0x63,0x64,0x62,0x5E,0x61,0x64,0x60, + 0x61,0x62,0x63,0x64,0x6A,0x6D,0x6F,0x74,0x71,0x77,0x74,0x73,0x74,0x8D,0x7D,0x60, + 0x66,0x63,0x5F,0x61,0x64,0x6A,0x67,0x66,0x63,0x63,0x5E,0x69,0x71,0x6C,0x69,0x64, + 0x74,0x74,0x77,0x97,0x9A,0x77,0x6D,0x65,0x64,0x5F,0x61,0x69,0x65,0x67,0x63,0x62, + 0x5F,0x5D,0x68,0x75,0x71,0x66,0x64,0x6B,0x79,0x8B,0xAD,0xA5,0x91,0x75,0x68,0x60, + 0x60,0x60,0x63,0x63,0x65,0x62,0x61,0x5E,0x5C,0x6D,0x79,0x6D,0x64,0x66,0x66,0x79, + 0x7D,0x94,0x90,0x7B,0x6E,0x61,0x5D,0x61,0x62,0x61,0x62,0x63,0x61,0x63,0x64,0x67, + 0x71,0x6F,0x71,0x68,0x63,0x62,0x76,0x76,0x74,0x73,0x77,0x6D,0x5F,0x60,0x64,0x64, + 0x68,0x69,0x66,0x63,0x67,0x6B,0x6F,0x70,0x72,0x7B,0x69,0x60,0x67,0x77,0x77,0x77, + 0x79,0x79,0x73,0x6F,0x66,0x65,0x65,0x6C,0x6F,0x6F,0x6F,0x70,0x71,0x72,0x74,0x75, + 0x7B,0x6B,0x65,0x6A,0x77,0x77,0x77,0x7F,0x80,0x73,0x7C,0x78,0x6A,0x64,0x6B,0x6F, + 0x70,0x73,0x73,0x73,0x77,0x7C,0x7C,0x7C,0x74,0x6B,0x71,0x78,0x78,0x79,0x82,0x7A, + 0x76,0x7E,0x80,0x7E,0x6F,0x6D,0x73,0x73,0x74,0x74,0x73,0x7C,0x7D,0x7E,0x7E,0x7C, + 0x76,0x7A,0x77,0x78,0x7A,0x82,0x76,0x7C,0x80,0x7E,0x80,0x80,0x7B,0x73,0x71,0x74, + 0x72,0x73,0x78,0x7C,0x7D,0x7E,0x7C,0x76,0x7A +}; + +static unsigned int comp_cr[345] = { + 0x81,0x83,0x83,0x83,0x83,0x82,0x83,0x85,0x91,0xB8,0xD4,0xBE,0xB0,0xA8,0xB0,0xAE, + 0x84,0x82,0x80,0x8C,0x82,0x7D,0x7F,0x80,0x82,0x81,0x81,0x80,0x82,0x84,0x86,0x85, + 0x99,0xB0,0xAA,0xA5,0xA1,0xA0,0x7F,0x70,0x7C,0x7E,0x82,0x78,0x70,0x79,0x80,0x82, + 0x84,0x86,0x82,0x84,0x8A,0x84,0x97,0xA2,0xAB,0xAE,0xB5,0xA9,0xA1,0xBA,0xA7,0xA9, + 0x9D,0x83,0x79,0x75,0x79,0x81,0x82,0x82,0x80,0x83,0x83,0x7F,0x89,0xB9,0xC3,0xC1, + 0xD5,0xDF,0xC9,0xC7,0xD0,0xE0,0xD8,0xD0,0x9D,0x80,0x86,0x80,0x83,0x85,0x82,0x76, + 0x75,0x89,0xAE,0xBF,0xC3,0xD0,0xCF,0xD5,0xDA,0xD1,0xC8,0xC1,0xC0,0xCB,0xCB,0xA0, + 0x7F,0x81,0x83,0x88,0x88,0x86,0x7C,0x85,0xC7,0xD3,0xCA,0xC5,0xD5,0xDE,0xD7,0xD5, + 0xCF,0xCE,0xC5,0xBF,0xBF,0xCB,0x91,0x76,0x75,0x86,0x8A,0x8A,0x8A,0x7F,0xAA,0xDC, + 0xBF,0xC9,0xCF,0xDD,0xE4,0xD8,0xC6,0xC5,0xCB,0xD1,0xDE,0xBE,0xD0,0x8D,0x6E,0x70, + 0x79,0x89,0x88,0x7C,0x7A,0x85,0xB1,0xCA,0xC3,0xD6,0xD4,0xC9,0xD3,0xD6,0xD3,0xD7, + 0xDB,0xDF,0xCD,0xC4,0x7D,0x72,0x71,0x75,0x83,0x80,0x77,0x7B,0x7F,0x8F,0xC4,0xCA, + 0xCD,0xC9,0xC6,0xD6,0xE6,0xDB,0xD8,0xD3,0xD0,0xDA,0x9E,0x78,0x74,0x74,0x75,0x82, + 0x81,0x7F,0x80,0x85,0x9B,0xCE,0xD1,0xC3,0xC7,0xD4,0xD4,0xD0,0xD9,0xD9,0xBE,0xB8, + 0xB0,0x7A,0x7B,0x76,0x72,0x70,0x86,0x86,0x87,0x86,0x7D,0xAB,0xD3,0xCB,0xBE,0xCB, + 0xC2,0xAF,0xBC,0xCC,0xB9,0xA6,0xA4,0x95,0x7B,0x81,0x77,0x70,0x71,0x86,0x86,0x86, + 0x86,0x82,0x94,0xAE,0xC8,0xD1,0xCB,0xA9,0xA2,0xA2,0xA2,0x9F,0x9D,0x9F,0x89,0x7A, + 0x7F,0x78,0x71,0x73,0x83,0x84,0x86,0x7F,0x80,0x7F,0x7E,0x94,0xB7,0xCC,0xB1,0xA2, + 0xA2,0x9B,0x9C,0x9A,0x8A,0x7D,0x7D,0x7D,0x7A,0x73,0x76,0x83,0x84,0x82,0x7D,0x80, + 0x84,0x82,0x80,0x80,0xA0,0xA9,0x9B,0x9A,0x98,0x90,0x86,0x7C,0x7E,0x7E,0x7E,0x7C, + 0x7A,0x7A,0x80,0x84,0x7F,0x7B,0x83,0x83,0x80,0x82,0x80,0x80,0x84,0x8B,0x8B,0x84, + 0x7E,0x81,0x81,0x7D,0x7D,0x7E,0x7D,0x79,0x7A +}; + +static unsigned int comp_dct[4608] = { + 0xFFFFFE94,0xFFFFFFC9,0xFFFFFFA7,0xFFFFFFF6,0x0000002E,0x00000004, + 0xFFFFFFEC,0xFFFFFFFE,0xFFFFFF2B,0x00000022,0x00000050,0xFFFFFFED, + 0xFFFFFFD8,0x00000007,0x0000000B,0xFFFFFFF9,0xFFFFFFEB,0xFFFFFFFE, + 0x00000014,0x0000001A,0xFFFFFFF5,0xFFFFFFE8,0x00000001,0x0000000C, + 0x0000001B,0xFFFFFFE4,0xFFFFFFF5,0x00000007,0x00000013,0x00000001, + 0x00000000,0xFFFFFFFB,0x0000002B,0x00000000,0xFFFFFFD4,0xFFFFFFE0, + 0x00000016,0x00000012,0xFFFFFFF8,0xFFFFFFFD,0xFFFFFFD3,0x0000000F, + 0x00000023,0xFFFFFFFD,0xFFFFFFE8,0xFFFFFFF6,0x00000009,0x00000000, + 0x00000011,0xFFFFFFFF,0x00000001,0x0000000B,0xFFFFFFF7,0x00000000, + 0xFFFFFFFE,0xFFFFFFFE,0x00000012,0xFFFFFFF5,0xFFFFFFF6,0x00000005, + 0x0000000C,0xFFFFFFFC,0xFFFFFFFC,0x00000004,0xFFFFFF20,0xFFFFFFD8, + 0xFFFFFFF8,0xFFFFFFDB,0xFFFFFFFE,0xFFFFFFFA,0x00000002,0xFFFFFFFF, + 0xFFFFFFC5,0xFFFFFFDC,0x0000000E,0xFFFFFFDC,0xFFFFFFFF,0xFFFFFFF8, + 0x00000004,0x00000000,0xFFFFFFFE,0x00000008,0xFFFFFFF9,0xFFFFFFE8, + 0x00000003,0xFFFFFFF8,0x00000008,0x00000005,0xFFFFFFFA,0x0000001B, + 0xFFFFFFFA,0xFFFFFFFF,0xFFFFFFF8,0x00000001,0xFFFFFFFB,0xFFFFFFFE, + 0x00000012,0x0000001B,0xFFFFFFEE,0x00000009,0xFFFFFFF4,0x00000003, + 0xFFFFFFFB,0x00000008,0x0000000C,0x00000011,0xFFFFFFF9,0x0000000C, + 0xFFFFFFFB,0x00000002,0xFFFFFFFC,0xFFFFFFF8,0x00000003,0x00000002, + 0xFFFFFFFF,0x00000007,0xFFFFFFF9,0x00000001,0xFFFFFFFF,0x00000006, + 0x00000002,0x00000000,0x00000001,0x00000001,0xFFFFFFFC,0x00000000, + 0xFFFFFFFE,0xFFFFFFFC,0x00000057,0xFFFFFF1A,0xFFFFFFA2,0xFFFFFFF4, + 0x00000050,0xFFFFFFFC,0xFFFFFFD3,0xFFFFFFF7,0xFFFFFEE5,0x000000B8, + 0x00000014,0xFFFFFFD0,0xFFFFFFB2,0x0000000A,0x0000001C,0x00000015, + 0x00000047,0xFFFFFFC7,0xFFFFFFE8,0xFFFFFFED,0xFFFFFFDB,0x0000003E, + 0xFFFFFFE3,0xFFFFFFF4,0x00000067,0xFFFFFFC8,0xFFFFFFC3,0xFFFFFFFF, + 0x0000002F,0xFFFFFFE7,0xFFFFFFF1,0x00000007,0xFFFFFFF2,0x0000001C, + 0xFFFFFFE7,0xFFFFFFFD,0x0000001C,0xFFFFFFE4,0xFFFFFFF8,0x0000000E, + 0xFFFFFFF1,0x0000000E,0x00000012,0xFFFFFFFE,0xFFFFFFE6,0x00000025, + 0xFFFFFFEB,0xFFFFFFFC,0x00000016,0xFFFFFFEF,0x0000000E,0x00000007, + 0xFFFFFFF5,0x00000012,0xFFFFFFF7,0xFFFFFFF6,0x00000009,0xFFFFFFFA, + 0x00000003,0x00000007,0x0000000E,0xFFFFFFEB,0x00000007,0xFFFFFFFB, + 0xFFFFFF76,0x000000DC,0x00000050,0xFFFFFFF9,0xFFFFFFEC,0x00000007, + 0x00000006,0xFFFFFFF8,0xFFFFFF77,0xFFFFFF21,0xFFFFFFA5,0x00000027, + 0x0000000B,0xFFFFFFF7,0xFFFFFFEF,0x00000008,0x0000008D,0x00000041, + 0xFFFFFFF9,0xFFFFFFCC,0xFFFFFFE7,0x0000000D,0x00000004,0xFFFFFFFB, + 0xFFFFFFED,0xFFFFFFF3,0x00000022,0x00000020,0x00000027,0x00000000, + 0xFFFFFFFF,0x00000003,0xFFFFFFDC,0xFFFFFFED,0xFFFFFFEF,0xFFFFFFF3, + 0x00000002,0x00000002,0x00000000,0x00000000,0x00000018,0x0000001F, + 0x00000004,0xFFFFFFEF,0xFFFFFFF1,0xFFFFFFFD,0xFFFFFFFE,0xFFFFFFF8, + 0xFFFFFFEC,0xFFFFFFF7,0x0000001C,0x00000020,0x0000000F,0xFFFFFFF9, + 0x00000000,0xFFFFFFFE,0x00000003,0xFFFFFFF9,0xFFFFFFE6,0xFFFFFFE9, + 0xFFFFFFF2,0x00000007,0x00000009,0x00000003,0xFFFFFF93,0x00000046, + 0x00000004,0xFFFFFFDF,0xFFFFFFE9,0xFFFFFFF8,0x00000005,0x00000006, + 0xFFFFFFFE,0x00000012,0xFFFFFFFE,0xFFFFFFF7,0x00000002,0x00000001, + 0x00000003,0x00000007,0x00000016,0xFFFFFFE4,0xFFFFFFED,0x0000000E, + 0x00000020,0x00000007,0xFFFFFFFB,0xFFFFFFFA,0xFFFFFFF5,0x00000003, + 0x0000000D,0x00000005,0xFFFFFFFE,0xFFFFFFF9,0xFFFFFFF6,0xFFFFFFFD, + 0x00000004,0x00000006,0x00000000,0x00000005,0xFFFFFFFB,0xFFFFFFF7, + 0xFFFFFFF3,0xFFFFFFF9,0xFFFFFFF1,0xFFFFFFF9,0xFFFFFFFF,0xFFFFFFF8, + 0x00000007,0x00000010,0x00000008,0x00000003,0xFFFFFFF9,0x00000007, + 0xFFFFFFFC,0xFFFFFFFB,0xFFFFFFFD,0xFFFFFFFF,0x0000000A,0x00000006, + 0x00000015,0x0000001E,0xFFFFFFFE,0xFFFFFFE7,0xFFFFFFEF,0xFFFFFFF9, + 0xFFFFFFFC,0xFFFFFFFD,0x00000104,0xFFFFFF4B,0xFFFFFFD6,0x00000031, + 0x00000005,0x00000007,0xFFFFFFF5,0xFFFFFFEC,0x00000023,0xFFFFFFD9, + 0x0000000E,0x0000000A,0xFFFFFFEB,0x00000001,0x0000000D,0xFFFFFFF5, + 0xFFFFFF83,0x00000041,0x00000025,0x00000004,0xFFFFFFDA,0xFFFFFFF0, + 0x00000011,0x00000006,0x00000015,0xFFFFFFED,0xFFFFFFFA,0x00000004, + 0x00000009,0x00000002,0x00000000,0xFFFFFFEF,0x00000004,0x00000000, + 0x00000002,0xFFFFFFF4,0xFFFFFFF6,0x00000006,0x00000014,0x00000001, + 0x0000001B,0xFFFFFFFC,0xFFFFFFF6,0x00000011,0xFFFFFFF4,0xFFFFFFE6, + 0x00000019,0x00000000,0x0000000E,0xFFFFFFF5,0xFFFFFFF9,0xFFFFFFFE, + 0x0000000C,0x0000000D,0xFFFFFFF6,0xFFFFFFE7,0x00000000,0xFFFFFFDD, + 0x00000010,0x0000000F,0x00000006,0xFFFFFFFE,0xFFFFFFF0,0x0000000B, + 0x00000026,0xFFFFFF40,0xFFFFFFE3,0x00000061,0xFFFFFFF1,0xFFFFFFB4, + 0x00000009,0x0000001D,0xFFFFFF6E,0xFFFFFFF7,0x00000002,0x00000040, + 0x0000002E,0x0000000A,0x00000009,0xFFFFFFFC,0xFFFFFF06,0x0000004F, + 0x0000001B,0xFFFFFFEA,0x00000003,0x00000010,0xFFFFFFFE,0x00000002, + 0x00000041,0xFFFFFFA6,0x00000001,0xFFFFFFCD,0xFFFFFFF9,0x00000008, + 0xFFFFFFE9,0x00000013,0x00000030,0xFFFFFFE8,0xFFFFFFDC,0xFFFFFFFC, + 0x0000000A,0xFFFFFFF5,0xFFFFFFF5,0x00000007,0xFFFFFFF7,0x00000027, + 0xFFFFFFEE,0xFFFFFFE0,0xFFFFFFFF,0x00000005,0xFFFFFFF5,0xFFFFFFF5, + 0xFFFFFFE2,0x0000001D,0x00000007,0xFFFFFFF3,0xFFFFFFF9,0xFFFFFFFD, + 0xFFFFFFF6,0xFFFFFFFC,0xFFFFFFF1,0x0000000B,0x0000001A,0xFFFFFFFD, + 0xFFFFFFF9,0x00000000,0xFFFFFFFC,0xFFFFFFFF,0x000000C1,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0xFFFFFF5D,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0xFFFFFEC9,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x000000DC,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000032,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0xFFFFFFC8,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFCC,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0xFFFFFFFD,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0xFFFFFEAF,0xFFFFFFB4,0x0000001F,0x00000032, + 0xFFFFFFE8,0xFFFFFFE3,0x00000005,0xFFFFFFF6,0x000000A8,0xFFFFFFE6, + 0x00000001,0x0000000A,0xFFFFFFFE,0xFFFFFFE9,0xFFFFFFE9,0xFFFFFFFA, + 0x00000007,0x00000021,0xFFFFFFF1,0xFFFFFFE5,0x0000000C,0x0000000B, + 0xFFFFFFEB,0xFFFFFFEF,0xFFFFFFDE,0x00000004,0xFFFFFFF4,0xFFFFFFFB, + 0x00000018,0x0000000F,0xFFFFFFF4,0xFFFFFFF6,0x00000004,0x00000000, + 0xFFFFFFFA,0x0000000E,0x0000000E,0xFFFFFFFC,0xFFFFFFFA,0xFFFFFFFF, + 0xFFFFFFFF,0x0000000E,0x00000001,0x00000009,0xFFFFFFFC,0xFFFFFFF1, + 0xFFFFFFFC,0x00000001,0xFFFFFFEE,0x00000000,0x00000003,0x00000007, + 0xFFFFFFF8,0xFFFFFFF3,0xFFFFFFFF,0x00000003,0xFFFFFFFD,0xFFFFFFFA, + 0xFFFFFFFE,0x00000006,0xFFFFFFFD,0xFFFFFFF9,0x00000001,0x00000004, + 0xFFFFFF08,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x000000C7,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFE2,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0xFFFFFFD6,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0xFFFFFFF9,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFE6,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0xFFFFFFEA,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0xFFFFFFFD,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFF97,0xFFFFFFFE, + 0xFFFFFFF8,0xFFFFFFF2,0xFFFFFFF1,0xFFFFFFF4,0xFFFFFFF9,0xFFFFFFFC, + 0x00000014,0xFFFFFFF8,0xFFFFFFF6,0xFFFFFFF7,0xFFFFFFFC,0x00000002, + 0x00000006,0x00000005,0x00000032,0x0000000C,0x00000004,0xFFFFFFFE, + 0x00000000,0x00000007,0x0000000B,0x00000009,0xFFFFFFEB,0x00000015, + 0x0000000A,0x00000000,0xFFFFFFFC,0xFFFFFFFD,0x00000000,0x00000001, + 0x00000006,0xFFFFFFFE,0xFFFFFFFC,0xFFFFFFFA,0xFFFFFFFB,0xFFFFFFFD, + 0xFFFFFFFF,0x00000000,0x0000000E,0xFFFFFFFF,0xFFFFFFFD,0xFFFFFFFC, + 0xFFFFFFFF,0x00000004,0x00000007,0x00000005,0x00000006,0x00000002, + 0xFFFFFFFC,0xFFFFFFFA,0xFFFFFFFE,0x00000006,0x0000000A,0x00000008, + 0x00000002,0x00000004,0xFFFFFFFD,0xFFFFFFF8,0xFFFFFFF9,0xFFFFFFFE, + 0x00000002,0x00000003,0x00000018,0x00000066,0x0000004E,0x0000002D, + 0x0000000E,0xFFFFFFF7,0xFFFFFFEE,0xFFFFFFF2,0x00000028,0x00000012, + 0x0000000D,0x00000004,0xFFFFFFFA,0xFFFFFFF3,0xFFFFFFF0,0xFFFFFFF5, + 0xFFFFFFD7,0xFFFFFFBA,0xFFFFFFC7,0xFFFFFFDB,0xFFFFFFF3,0x00000006, + 0x0000000F,0x0000000C,0xFFFFFFD7,0xFFFFFFE9,0xFFFFFFF0,0xFFFFFFFC, + 0x0000000A,0x00000014,0x00000016,0x0000000E,0x00000006,0x00000004, + 0x00000005,0x00000005,0x00000003,0x00000001,0xFFFFFFFE,0xFFFFFFFE, + 0x00000008,0xFFFFFFFF,0xFFFFFFFE,0xFFFFFFFC,0xFFFFFFFA,0xFFFFFFF8, + 0xFFFFFFF7,0xFFFFFFFA,0x00000006,0xFFFFFFF7,0xFFFFFFF8,0xFFFFFFFA, + 0xFFFFFFFC,0xFFFFFFFF,0x00000000,0x00000001,0x0000000A,0xFFFFFFFA, + 0xFFFFFFFA,0xFFFFFFFC,0xFFFFFFFE,0x00000000,0x00000001,0x00000001, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000 +}; + + +#ifdef NO_DIV +static unsigned int comp_dct_quant[4608] = { + 0xFFFFFFD3,0xFFFFFFF7,0xFFFFFFEE,0xFFFFFFFF,0x00000004,0x00000000, + 0xFFFFFFFF,0x00000000,0xFFFFFFDD,0x00000006,0x0000000B,0xFFFFFFFE, + 0xFFFFFFFD,0x00000000,0x00000000,0x00000000,0xFFFFFFFD,0x00000000, + 0x00000002,0x00000002,0xFFFFFFFF,0xFFFFFFFF,0x00000000,0x00000000, + 0x00000004,0xFFFFFFFD,0xFFFFFFFF,0x00000000,0x00000001,0x00000000, + 0x00000000,0x00000000,0x00000005,0x00000000,0xFFFFFFFE,0xFFFFFFFF, + 0x00000001,0x00000000,0x00000000,0x00000000,0xFFFFFFFC,0x00000001, + 0x00000001,0x00000000,0xFFFFFFFF,0x00000000,0x00000000,0x00000000, + 0x00000001,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFE4,0xFFFFFFF9, + 0xFFFFFFFF,0xFFFFFFFB,0x00000000,0x00000000,0x00000000,0x00000000, + 0xFFFFFFF6,0xFFFFFFFA,0x00000002,0xFFFFFFFC,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000001,0xFFFFFFFF,0xFFFFFFFE, + 0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFFF,0x00000003, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000002,0x00000002,0xFFFFFFFF,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000001,0x00000001,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x0000000B,0xFFFFFFDA,0xFFFFFFED,0xFFFFFFFF, + 0x00000007,0x00000000,0xFFFFFFFE,0x00000000,0xFFFFFFD1,0x0000001F, + 0x00000003,0xFFFFFFFB,0xFFFFFFFA,0x00000000,0x00000001,0x00000001, + 0x0000000A,0xFFFFFFF8,0xFFFFFFFD,0xFFFFFFFE,0xFFFFFFFE,0x00000002, + 0xFFFFFFFF,0x00000000,0x0000000F,0xFFFFFFFA,0xFFFFFFFB,0x00000000, + 0x00000002,0xFFFFFFFF,0x00000000,0x00000000,0xFFFFFFFF,0x00000002, + 0xFFFFFFFF,0x00000000,0x00000001,0x00000000,0x00000000,0x00000000, + 0xFFFFFFFF,0x00000001,0x00000001,0x00000000,0xFFFFFFFF,0x00000001, + 0x00000000,0x00000000,0x00000001,0xFFFFFFFF,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0xFFFFFFEF,0x00000025,0x00000010,0xFFFFFFFF,0xFFFFFFFE,0x00000000, + 0x00000000,0x00000000,0xFFFFFFE9,0xFFFFFFDB,0xFFFFFFF3,0x00000004, + 0x00000001,0x00000000,0xFFFFFFFF,0x00000000,0x00000014,0x00000009, + 0xFFFFFFFF,0xFFFFFFFC,0xFFFFFFFF,0x00000000,0x00000000,0x00000000, + 0xFFFFFFFD,0xFFFFFFFF,0x00000003,0x00000002,0x00000001,0x00000000, + 0x00000000,0x00000000,0xFFFFFFFC,0xFFFFFFFE,0xFFFFFFFF,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000002,0x00000002, + 0x00000000,0xFFFFFFFF,0x00000000,0x00000000,0x00000000,0x00000000, + 0xFFFFFFFF,0x00000000,0x00000001,0x00000001,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFFF,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFF4,0x00000008, + 0x00000000,0xFFFFFFFF,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000002,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000002,0xFFFFFFFE,0xFFFFFFFF,0x00000000, + 0x00000001,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000001,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x0000001D,0xFFFFFFEC,0xFFFFFFFD,0x00000002, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000004,0xFFFFFFFD, + 0x00000001,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0xFFFFFFF6,0x00000005,0x00000001,0x00000000,0xFFFFFFFF,0x00000000, + 0x00000000,0x00000000,0x00000001,0xFFFFFFFF,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000001,0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFFF, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFFF, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000005,0xFFFFFFE0,0xFFFFFFFA,0x0000000C,0xFFFFFFFF,0xFFFFFFFC, + 0x00000000,0x00000001,0xFFFFFFE8,0xFFFFFFFF,0x00000000,0x00000006, + 0x00000003,0x00000000,0x00000000,0x00000000,0xFFFFFFDC,0x0000000B, + 0x00000003,0xFFFFFFFE,0x00000000,0x00000001,0x00000000,0x00000000, + 0x00000009,0xFFFFFFF6,0x00000000,0xFFFFFFFD,0x00000000,0x00000000, + 0xFFFFFFFF,0x00000001,0x00000005,0xFFFFFFFE,0xFFFFFFFE,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFFF,0x00000002, + 0xFFFFFFFF,0xFFFFFFFF,0x00000000,0x00000000,0x00000000,0x00000000, + 0xFFFFFFFF,0x00000001,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000018,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0xFFFFFFE5,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0xFFFFFFD4,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x0000001F,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000005,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0xFFFFFFFB,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFFE,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0xFFFFFFD6,0xFFFFFFF3,0x00000006,0x00000006, + 0xFFFFFFFE,0xFFFFFFFF,0x00000000,0x00000000,0x0000001C,0xFFFFFFFC, + 0x00000000,0x00000001,0x00000000,0xFFFFFFFF,0xFFFFFFFF,0x00000000, + 0x00000001,0x00000005,0xFFFFFFFE,0xFFFFFFFE,0x00000001,0x00000000, + 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFB,0x00000000,0xFFFFFFFF,0x00000000, + 0x00000001,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000001,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0xFFFFFFFF,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0xFFFFFFE1,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000021,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFFC,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0xFFFFFFFA,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0xFFFFFFFF,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFFE,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0xFFFFFFFF,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFF4,0x00000000, + 0xFFFFFFFF,0xFFFFFFFF,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000002,0xFFFFFFFF,0xFFFFFFFF,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000004,0x00000001,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFFF,0x00000001, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000003,0x0000000B,0x00000006,0x00000002, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000004,0x00000002, + 0x00000001,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0xFFFFFFFD,0xFFFFFFFB,0xFFFFFFFE,0xFFFFFFFF,0x00000000,0x00000000, + 0x00000000,0x00000000,0xFFFFFFFE,0xFFFFFFFF,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000 +}; +#else +static unsigned int comp_dct_quant[3072] = { + 0xFFFFFFD2,0xFFFFFFF7,0xFFFFFFEE,0xFFFFFFFF,0x00000004,0x00000000, + 0xFFFFFFFF,0x00000000,0xFFFFFFDC,0x00000006,0x0000000B,0xFFFFFFFE, + 0xFFFFFFFD,0x00000000,0x00000000,0x00000000,0xFFFFFFFD,0x00000000, + 0x00000003,0x00000002,0xFFFFFFFF,0xFFFFFFFF,0x00000000,0x00000000, + 0x00000004,0xFFFFFFFD,0xFFFFFFFF,0x00000000,0x00000001,0x00000000, + 0x00000000,0x00000000,0x00000005,0x00000000,0xFFFFFFFE,0xFFFFFFFF, + 0x00000001,0x00000000,0x00000000,0x00000000,0xFFFFFFFC,0x00000001, + 0x00000001,0x00000000,0xFFFFFFFF,0x00000000,0x00000000,0x00000000, + 0x00000001,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000001,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFE4,0xFFFFFFF9, + 0xFFFFFFFE,0xFFFFFFFB,0x00000000,0x00000000,0x00000000,0x00000000, + 0xFFFFFFF6,0xFFFFFFFA,0x00000002,0xFFFFFFFC,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000001,0xFFFFFFFF,0xFFFFFFFE, + 0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFFF,0x00000003, + 0xFFFFFFFF,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000002,0x00000002,0xFFFFFFFF,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000001,0x00000001,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x0000000B,0xFFFFFFDA,0xFFFFFFED,0xFFFFFFFE, + 0x00000007,0x00000000,0xFFFFFFFE,0x00000000,0xFFFFFFD1,0x0000001F, + 0x00000003,0xFFFFFFFB,0xFFFFFFFA,0x00000000,0x00000001,0x00000001, + 0x0000000A,0xFFFFFFF8,0xFFFFFFFD,0xFFFFFFFE,0xFFFFFFFE,0x00000002, + 0xFFFFFFFF,0x00000000,0x0000000F,0xFFFFFFFA,0xFFFFFFFA,0x00000000, + 0x00000002,0xFFFFFFFF,0x00000000,0x00000000,0xFFFFFFFE,0x00000003, + 0xFFFFFFFF,0x00000000,0x00000001,0xFFFFFFFF,0x00000000,0x00000000, + 0xFFFFFFFF,0x00000001,0x00000001,0x00000000,0xFFFFFFFF,0x00000001, + 0x00000000,0x00000000,0x00000001,0xFFFFFFFF,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0xFFFFFFEF,0x00000025,0x00000010,0xFFFFFFFF,0xFFFFFFFE,0x00000000, + 0x00000000,0x00000000,0xFFFFFFE9,0xFFFFFFDB,0xFFFFFFF3,0x00000004, + 0x00000001,0x00000000,0xFFFFFFFF,0x00000000,0x00000014,0x00000009, + 0xFFFFFFFF,0xFFFFFFFC,0xFFFFFFFF,0x00000000,0x00000000,0x00000000, + 0xFFFFFFFD,0xFFFFFFFF,0x00000003,0x00000002,0x00000002,0x00000000, + 0x00000000,0x00000000,0xFFFFFFFC,0xFFFFFFFE,0xFFFFFFFF,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000002,0x00000002, + 0x00000000,0xFFFFFFFF,0x00000000,0x00000000,0x00000000,0x00000000, + 0xFFFFFFFF,0x00000000,0x00000001,0x00000001,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFFF,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFF4,0x00000008, + 0x00000000,0xFFFFFFFF,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000002,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000002,0xFFFFFFFE,0xFFFFFFFF,0x00000000, + 0x00000001,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000001,0x00000000,0xFFFFFFFF,0x00000000,0x00000000, + 0x00000000,0x00000000,0x0000001D,0xFFFFFFEC,0xFFFFFFFC,0x00000002, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000004,0xFFFFFFFC, + 0x00000001,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0xFFFFFFF6,0x00000005,0x00000001,0x00000000,0xFFFFFFFF,0x00000000, + 0x00000000,0x00000000,0x00000001,0xFFFFFFFF,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000001,0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFFF, + 0x00000001,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0xFFFFFFFF,0x00000000,0xFFFFFFFF, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000005,0xFFFFFFE0,0xFFFFFFFA,0x0000000C,0xFFFFFFFF,0xFFFFFFFC, + 0x00000000,0x00000001,0xFFFFFFE8,0xFFFFFFFE,0x00000000,0x00000006, + 0x00000004,0x00000000,0x00000000,0x00000000,0xFFFFFFDC,0x0000000B, + 0x00000003,0xFFFFFFFE,0x00000000,0x00000001,0x00000000,0x00000000, + 0x00000009,0xFFFFFFF6,0x00000000,0xFFFFFFFD,0x00000000,0x00000000, + 0xFFFFFFFF,0x00000001,0x00000005,0xFFFFFFFE,0xFFFFFFFE,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFFF,0x00000002, + 0xFFFFFFFF,0xFFFFFFFF,0x00000000,0x00000000,0x00000000,0x00000000, + 0xFFFFFFFF,0x00000001,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000018,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0xFFFFFFE5,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0xFFFFFFD4,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x0000001F,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000006,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0xFFFFFFFB,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFFE,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0xFFFFFFD6,0xFFFFFFF3,0x00000006,0x00000006, + 0xFFFFFFFE,0xFFFFFFFF,0x00000000,0x00000000,0x0000001C,0xFFFFFFFC, + 0x00000000,0x00000001,0x00000000,0xFFFFFFFF,0xFFFFFFFF,0x00000000, + 0x00000001,0x00000005,0xFFFFFFFE,0xFFFFFFFE,0x00000001,0x00000000, + 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFB,0x00000000,0xFFFFFFFF,0x00000000, + 0x00000001,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000001,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000001,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0xFFFFFFFF,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0xFFFFFFE1,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000021,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFFC,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0xFFFFFFFA,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0xFFFFFFFF,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFFE,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0xFFFFFFFF,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFF4,0x00000000, + 0xFFFFFFFF,0xFFFFFFFF,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000002,0xFFFFFFFF,0xFFFFFFFF,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000004,0x00000001,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0xFFFFFFFF,0x00000001, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000003,0x0000000B,0x00000007,0x00000002, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000004,0x00000002, + 0x00000001,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0xFFFFFFFD,0xFFFFFFFB,0xFFFFFFFE,0xFFFFFFFF,0x00000000,0x00000000, + 0x00000000,0x00000000,0xFFFFFFFE,0xFFFFFFFF,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000 +}; + +#endif + + +#endif //_CMACORE_H_ diff --git a/config.h b/config.h index e56e396..dad5534 100644 --- a/config.h +++ b/config.h @@ -91,7 +91,9 @@ #define HAVE_VPRINTF 1 /* Name of package */ -#define PACKAGE "vmips" +#ifndef PACKAGE +#define PACKAGE "cube_sim" +#endif /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "" diff --git a/cpu.cc b/cpu.cc index 3194704..2659de0 100644 --- a/cpu.cc +++ b/cpu.cc @@ -74,7 +74,7 @@ PipelineRegs::~PipelineRegs() CPU::CPU (Mapper &m, IntCtrl &i, int cpuid) : tracing (false), last_epc (0), last_prio (0), mem (&m), cpzero (new CPZero (this, &i, cpuid)), fpu (0), delay_state (NORMAL), - mul_div_remain(0), suspend(false) + mul_div_remain(0), suspend(false), icache(NULL), dcache(NULL) { opt_fpu = machine->opt->option("fpu")->flag; if (opt_fpu) @@ -104,6 +104,7 @@ CPU::CPU (Mapper &m, IntCtrl &i, int cpuid) mem_bandwidth = machine->opt->option("mem_bandwidth")->num; exception_pending = false; + volatilize_pipeline(); } CPU::~CPU () @@ -826,6 +827,11 @@ void CPU::pre_decode(bool& data_hazard) preg->instr = NOP_INSTR; } break; + case OP_CACHE: + if (RI_cache_op_flag[rt(dec_instr)]) { + exception(RI); + preg->instr = NOP_INSTR; + } default: if (RI_flag[dec_opcode]) { exception(RI); @@ -1042,7 +1048,7 @@ void CPU::execute() NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &CPU::addu_exec, &CPU::addu_exec, &CPU::addu_exec, &CPU::addu_exec, &CPU::addu_exec, &CPU::addu_exec, &CPU::addu_exec, NULL, - &CPU::addu_exec, &CPU::addu_exec, &CPU::addu_exec, &CPU::addu_exec, NULL, NULL, &CPU::addu_exec, NULL, + &CPU::addu_exec, &CPU::addu_exec, &CPU::addu_exec, &CPU::addu_exec, NULL, NULL, &CPU::addu_exec, &CPU::addu_exec, &CPU::lwc1_exec, &CPU::lwc2_exec, &CPU::lwc3_exec, NULL, NULL, NULL, NULL, &CPU::swc1_exec, &CPU::swc2_exec, &CPU::swc3_exec, NULL, NULL, NULL, NULL }; @@ -1063,6 +1069,7 @@ void CPU::execute() //reset signal exception_pending = false; } + } void CPU::pre_mem_access(bool& data_miss) @@ -1070,6 +1077,7 @@ void CPU::pre_mem_access(bool& data_miss) PipelineRegs *preg = PL_REGS[MEM_STAGE]; uint32 mem_instr = preg->instr; uint16 mem_opcode = opcode(mem_instr); + uint16 cache_opcode; uint32 phys; bool cacheable; @@ -1093,7 +1101,12 @@ void CPU::pre_mem_access(bool& data_miss) if (vaddr % 4 != 0) { exception(AdEL); } - break; + case OP_LWL: + case OP_LWR: + case OP_SWL: + case OP_SWR: + vaddr &= ~0x03UL; //make word alignment + break; } //Exception may be occured @@ -1103,7 +1116,16 @@ void CPU::pre_mem_access(bool& data_miss) mode = DATALOAD; } - if (mem_write_flag[mem_opcode] || mem_read_flag[mem_opcode]) { + if (mem_opcode == OP_CACHE) { + phys = cpzero->address_trans(vaddr, ANY, &cacheable, this); + if (!cacheable) { + exception(AdEL); + } else { + cache_opcode = rt(mem_instr); + cache = cache_op_mux(cache_opcode); + data_miss = !cache->exec_cache_op(cache_opcode, phys, this); + } + } else if (mem_write_flag[mem_opcode] || mem_read_flag[mem_opcode]) { phys = cpzero->address_trans(vaddr, mode, &cacheable, this); //check stall if (cacheable) { @@ -1143,6 +1165,7 @@ void CPU::mem_access() Cache *cache = cpzero->caches_swapped() ? icache : dcache; uint8 which_byte; uint32 wordvirt; + uint32 byte; uint32 vaddr = preg->result; @@ -1169,7 +1192,18 @@ void CPU::mem_access() case OP_SWL: wordvirt = vaddr & ~0x03UL; which_byte = vaddr & 0x03UL; - fprintf(stderr, "Not implemented SWL\n"); + if (opt_bigendian) { + for(int i = which_byte; i < 4; i++) { + byte = (data >> (8 * (3 - i))) & 0xFF; + cache->store_byte(wordvirt + i, byte, this); + } + } else { + //little endian + for(int i = 0; i <= which_byte; i++) { + byte = (data >> (8 * i - 8 * which_byte + 24)) & 0xFF; + cache->store_byte(wordvirt + i, byte, this); + } + } break; case OP_SW: cache->store_word(phys, data, this); @@ -1177,7 +1211,19 @@ void CPU::mem_access() case OP_SWR: wordvirt = vaddr & ~0x03UL; which_byte = vaddr & 0x03UL; - fprintf(stderr, "Not implemented SWR\n"); + if (opt_bigendian) { + for(int i = 0; i <= which_byte; i++) { + byte = (data >> (8 * (which_byte - i))) & 0xFF; + cache->store_byte(wordvirt + i, byte, this); + } + } else { + //little endian + for(int i = which_byte; i < 4; i++) { + byte = (data >> (8 * (i - which_byte))) & 0xFF; + cache->store_byte(wordvirt + i, byte, this); + } + } + break; } } else { @@ -1213,8 +1259,9 @@ void CPU::mem_access() preg->r_mem_data = cache->fetch_halfword(phys, this); break; case OP_LWL: - case OP_LW: case OP_LWR: + phys &= ~0x03UL; + case OP_LW: preg->r_mem_data = cache->fetch_word(phys, DATALOAD, this); break; } @@ -1230,8 +1277,9 @@ void CPU::mem_access() preg->r_mem_data = (int16)mem->fetch_halfword(phys, this); break; case OP_LWL: - case OP_LW: case OP_LWR: + phys &= ~0x03UL; + case OP_LW: preg->r_mem_data = mem->fetch_word(phys, DATALOAD, this); break; } @@ -1599,7 +1647,8 @@ CPU::debug_registers_to_packet(void) debug_packet_push_word(packet, hi); r++; debug_packet_push_word(packet, bad); r++; debug_packet_push_word(packet, cause); r++; - debug_packet_push_word(packet, pc); r++; + debug_packet_push_word(packet, PL_REGS[WB_STAGE]->pc); r++; + for (; r < 90; r++) { /* unimplemented regs at end */ debug_packet_push_word(packet, 0); } @@ -1650,7 +1699,7 @@ CPU::debug_set_pc(uint32 newpc) uint32 CPU::debug_get_pc(void) { - return pc; + return PL_REGS[WB_STAGE]->pc; } void @@ -1686,23 +1735,41 @@ CPU::debug_fetch_region(uint32 addr, uint32 len, char *packet, uint32 real_addr; bool cacheable = false; + mem->enable_debug_mode(); for (; len; addr++, len--) { real_addr = cpzero->address_trans(addr, DATALOAD, &cacheable, client); /* Stop now and return an error code if translation * caused an exception. */ if (client->exception_pending) { + mem->disable_debug_mode(); return -1; } - byte = mem->fetch_byte(real_addr, client); + + if (cacheable) { + if (icache->ready(real_addr)) { + byte = icache->fetch_byte(real_addr, client); + } else if (dcache->ready(real_addr)) { + byte = dcache->fetch_byte(real_addr, client); + } else { + // access memory without cache + byte = mem->fetch_byte(real_addr, client); + } + } else { + byte = mem->fetch_byte(real_addr, client); + } + /* Stop now and return an error code if the fetch * caused an exception. */ if (client->exception_pending) { + mem->disable_debug_mode(); return -1; } debug_packet_push_byte(packet, byte); } + mem->disable_debug_mode(); + return 0; } @@ -1720,17 +1787,34 @@ CPU::debug_store_region(uint32 addr, uint32 len, char *packet, uint32 real_addr; bool cacheable = false; + mem->enable_debug_mode(); for (; len; addr++, len--) { byte = machine->dbgr->packet_pop_byte(&packet); real_addr = cpzero->address_trans(addr, DATALOAD, &cacheable, client); if (client->exception_pending) { + mem->disable_debug_mode(); return -1; } - mem->store_byte(real_addr, byte, client); + + if (cacheable) { + if (icache->ready(real_addr)) { + icache->store_byte(real_addr,byte, client); + } else if (dcache->ready(real_addr)) { + dcache->store_byte(real_addr, byte, client); + } else { + // access memory without cache + mem->store_byte(real_addr, byte, client); + } + } else { + mem->store_byte(real_addr, byte, client); + } + if (client->exception_pending) { + mem->disable_debug_mode(); return -1; } } + mem->disable_debug_mode(); return 0; } @@ -2495,4 +2579,12 @@ void CPU::bgezal_exec() preg->result = preg->pc + 8; } +Cache* CPU::cache_op_mux(uint32 opcode) +{ + if (cpzero->caches_swapped()) { + return opcode >= DCACHE_OPCODE_START ? icache : dcache; + } else { + return opcode >= DCACHE_OPCODE_START ? dcache : icache; + } +} diff --git a/cpu.h b/cpu.h index d0e6152..06a5435 100644 --- a/cpu.h +++ b/cpu.h @@ -25,9 +25,8 @@ with VMIPS; if not, write to the Free Software Foundation, Inc., #include #include #include - #include "cache.h" - +#include "cacheinstr.h" class CPZero; @@ -440,6 +439,8 @@ class CPU : public DeviceExc { //cache instance Cache *icache; Cache *dcache; + + Cache* cache_op_mux(uint32 opcode); }; #endif /* _CPU_H_ */ diff --git a/debug.cc b/debug.cc index 0d9aced..38cdb51 100644 --- a/debug.cc +++ b/debug.cc @@ -255,7 +255,7 @@ Debug::print_local_name(int s) return; } fprintf(stderr, - "Use this command to attach debugger: target remote %s:%u\n", + "Use this command to attach debugger: \x1b[4m\x1b[1mtarget remote %s:%u\x1b[0m\n", inet_ntoa(addr.sin_addr), ntohs(addr.sin_port)); } @@ -367,6 +367,8 @@ Debug::target_query(char *pkt) return rawpacket("l"); } else if (strcmp(pkt, "ThreadExtraInfo,1")==0) { return hexpacket("Simulated Thread"); + } else if (strcmp(pkt, "Symbol::")==0) { + return rawpacket("OK"); } else { return rawpacket(""); } diff --git a/mapper.cc b/mapper.cc index b4ba001..9956f70 100644 --- a/mapper.cc +++ b/mapper.cc @@ -69,6 +69,9 @@ bool Mapper::ready(uint32 addr, int32 mode, DeviceExc *client) client }; + if (debug_mode) { + return true; + } bool constainsKey = (access_requests_time.find(key) != access_requests_time.end()); diff --git a/mapper.h b/mapper.h index a2bd124..c1e621a 100644 --- a/mapper.h +++ b/mapper.h @@ -85,6 +85,8 @@ class Mapper { of R. */ int add_range (Range *r); + bool debug_mode; + public: Mapper(); ~Mapper(); @@ -150,6 +152,9 @@ class Mapper { /* Copy information about the most recent bus error to INFO. */ void get_last_berr_info (BusErrorInfo &info) { info = last_berr_info; } + void enable_debug_mode() { debug_mode = true; } + void disable_debug_mode() { debug_mode = false; } + }; #endif /* _MAPPER_H_ */ diff --git a/memorymodule.h b/memorymodule.h index d084408..9046a87 100644 --- a/memorymodule.h +++ b/memorymodule.h @@ -22,12 +22,20 @@ with VMIPS; if not, write to the Free Software Foundation, Inc., #include "range.h" #include "memorymodule.h" +#include "fileutils.h" +#include "mmapglue.h" +#include class MemoryModule : public Range { public: uint32 *myaddr; - MemoryModule(size_t size) : Range (0, size, 0, MEM_READ_WRITE) { + MemoryModule(size_t size, FILE *init_data = NULL) : Range (0, size, 0, MEM_READ_WRITE) { myaddr = new uint32[size / 4](); + if (init_data != NULL) { + std::memcpy((void*)myaddr, + mmap(0, extent, PROT_READ, MAP_PRIVATE, fileno (init_data), ftell (init_data)), + get_file_size (init_data)); + } address = static_cast (myaddr); } ~MemoryModule() { diff --git a/options.cc b/options.cc index d5d2e1e..394721e 100644 --- a/options.cc +++ b/options.cc @@ -319,8 +319,8 @@ void Options::usage(char *argv0) { printf( -"Usage: %s [OPTION]... [ROM-FILE]\n" -"Start the %s virtual machine, using the ROM-FILE as the boot ROM.\n" +"Usage: %s [OPTION]... [PROGRAM-BINARY]\n" +"Start the %s virtual machine, using the the boot ROM.\n" "\n" " -o OPTION behave as if OPTION were specified in .vmipsrc\n" " (see manual for details)\n" @@ -330,7 +330,7 @@ Options::usage(char *argv0) " --help display this help message and exit\n" " --print-config display compile-time variables and exit\n" "\n" -"By default, `romfile.rom' is used if no ROM-FILE is specified.\n" +"By default, `romfile.rom' is used if no PROGRAM-BINARY is specified.\n" "\n" "Report bugs to .\n", PACKAGE, PACKAGE); diff --git a/optiontbl.h b/optiontbl.h index 5d4b36c..6093bee 100644 --- a/optiontbl.h +++ b/optiontbl.h @@ -206,6 +206,8 @@ static Option nametable[] = { /** This variable controls the size of the virtual CPU's "physical" memory in bytes. **/ + { "progmemsize", NUM }, + { "memdump", FLAG }, /** If @option{memdump} is set, then the virtual machine will dump its RAM into a file, whose name is given by the @option{memdumpfile} option, @@ -397,7 +399,7 @@ static const char *defaults_table[] = { "noexcmsg", "bootmsg", "noinstdump", "nodumpcpu", "nodumpcp0", "haltibe", "haltbreak", "haltdevice", "romfile=romfile.rom", "bootfile=boot.bin", "bootaddr=0xbfc00000", - "loadaddr=0x81000000", "noinstcounts", + "loadaddr=0x81000000", "noinstcounts", "progmemsize=0x2000000", "memsize=0x100000", "nomemdump", "memdumpfile=memdump.bin", "noreportirq", "ttydev=/dev/tty", "ttydev2=off", "nodebug", "debugport=0", "norealtime", "timeratio=1", "clockspeed=250000", @@ -408,7 +410,7 @@ static const char *defaults_table[] = { "execname=none", "nofpu", "notestdev", "nocacheprof", "icacheway=2", "dcacheway=2", "icachebsize=64", "dcachebsize=64", "icachebnum=64", "dcachebnum=64", "mem_bandwidth=1", - "mem_access_latency=4", "vcbufsize=24", "noroutermsg", + "mem_access_latency=8", "vcbufsize=24", "noroutermsg", "accelerator0=none", "accelerator1=none", "accelerator2=none", NULL }; diff --git a/router.cc b/router.cc index c3d1e73..c744b7c 100644 --- a/router.cc +++ b/router.cc @@ -36,11 +36,11 @@ void RouterUtils::make_ack_flit(FLIT_t *flit, uint32 ftype, int *cnt) uint32 data = 0; for (int i = 0; i < FLIT_ACK_ENTRY; i++) { if (cnt[i] >= 1 << FLIT_ACK_CNT_BIT) { - if (machine->opt->option("routermsg")->flag) { - fprintf(stderr, "ACK count overflow!\n"); - } + // count is larger than ack field + data |= ACK_COUNT_MAX << (FLIT_ACK_CNT_BIT * i); + } else { + data |= (cnt[i] & ACK_COUNT_MAX) << (FLIT_ACK_CNT_BIT * i); } - data |= (cnt[i] & ((1 << FLIT_ACK_CNT_BIT) - 1)) << (FLIT_ACK_CNT_BIT * i); } flit->data = data; } @@ -231,6 +231,8 @@ void Router::step() icUpper->step(); icLower->step(); + cb->step(); + } /******************************* InputChannel *******************************/ @@ -287,9 +289,11 @@ void InputChannel::step() FLIT_t flit; uint32 recv_vch; int i; - + bool vc_hold = false; int current_time = machine->num_cycles; + + for (i = 0; i < VCH_SIZE; i++) { if (!ibuf[i].empty()) { flit = ibuf[i].front(); @@ -300,6 +304,7 @@ void InputChannel::step() switch (vc_state[i]) { //Swtich Traversal case VC_STATE_ST: + vc_hold = true; if (vc_next_state[i] != VC_STATE_RC) { ibuf[i].pop(); cb->send(this, &flit, i, send_port[i]); @@ -313,14 +318,16 @@ void InputChannel::step() break; //Virtual Channel Switch Allocation case VC_STATE_VSA: - if (!isGranted(i)) { - //if not granted, request grant + if (!isGranted(i) & !vc_hold) { + //if not granted & other vc does not use, request grant request(i); + vc_hold = true; } else if (isGranted(i) & cb->ready(this, i, send_port[i])) { //granted & ready vc_next_state[i] = VC_STATE_ST; //grant holding hold(); + vc_hold = true; } break; //Routing Computation @@ -410,7 +417,13 @@ void OutputChannel::ackSend() if (ackSendEn) { RouterUtils::make_ack_flit(&flit, FTYPE_ACK1, ack_count); oport->send(&flit, ACK_VCH); - for (int i = 0; i < VCH_SIZE / 2; i++) ack_count[i] = 0; + for (int i = 0; i < VCH_SIZE / 2; i++) { + if (ack_count[i] > ACK_COUNT_MAX) { + ack_count[i] -= ACK_COUNT_MAX; + } else { + ack_count[i] = 0; + } + } } } else { for (int i = VCH_SIZE / 2; i < VCH_SIZE; i++) { @@ -422,7 +435,12 @@ void OutputChannel::ackSend() if (ackSendEn) { RouterUtils::make_ack_flit(&flit, FTYPE_ACK2, &ack_count[VCH_SIZE / 2]); oport->send(&flit, ACK_VCH); - for (int i = VCH_SIZE / 2; i < VCH_SIZE; i++) ack_count[i] = 0; + for (int i = VCH_SIZE / 2; i < VCH_SIZE; i++) { + if (ack_count[i] > ACK_COUNT_MAX) { + } else { + ack_count[i] = 0; + } + } } } diff --git a/router.h b/router.h index 38562bd..807597a 100644 --- a/router.h +++ b/router.h @@ -33,6 +33,7 @@ #define FLIT_MEMA_LSB 10 #define FLIT_ACK_ENTRY 4 #define FLIT_ACK_CNT_BIT 4 +#define ACK_COUNT_MAX ((1 << FLIT_ACK_CNT_BIT) - 1) #define VCH_SIZE 8 #define ACK_VCH 0 //ack is sent via vch0 @@ -223,6 +224,7 @@ class InputChannel { void pushData(FLIT_t *flit, uint32 vch); void reset(); void step(); + }; diff --git a/routerinterface.cc b/routerinterface.cc index 16bdcea..1897791 100644 --- a/routerinterface.cc +++ b/routerinterface.cc @@ -111,6 +111,8 @@ uint32 RouterIOReg::fetch_word(uint32 offset, int mode, DeviceExc *client) //write from client void RouterIOReg::store_word(uint32 offset, uint32 data, DeviceExc *client) { + bool clear_flag[REMOTE_NODE_COUNT]; + // Write to IO Regs switch(offset) { case ROUTER_ID_OFFSET: @@ -138,13 +140,19 @@ void RouterIOReg::store_word(uint32 offset, uint32 data, DeviceExc *client) config->int_vch[2] = data & ROUTER_INTVCH_NODE2_BITMASK; break; case ROUTER_DONE_STAT_OFFSET: - bin2bool(data & ROUTER_DONE_STAT_BITMASK, config->done_status, REMOTE_NODE_COUNT); + bin2bool(data & ROUTER_DONE_STAT_BITMASK, clear_flag, REMOTE_NODE_COUNT); + for (int i = 0; i < REMOTE_NODE_COUNT; i++) { + if (clear_flag[i]) config->done_status[i] = false; + } break; case ROUTER_DONE_MASK_OFFSET: bin2bool(data & ROUTER_DONE_MASK_BITMASK, config->done_mask, REMOTE_NODE_COUNT); break; case ROUTER_DMAC_STAT_OFFSET: - bin2bool(data & ROUTER_DMAC_STAT_BITMASK,config->dmac_status, REMOTE_NODE_COUNT); + bin2bool(data & ROUTER_DMAC_STAT_BITMASK, clear_flag, REMOTE_NODE_COUNT); + for (int i = 0; i < REMOTE_NODE_COUNT; i++) { + if (clear_flag[i]) config->dmac_status[i] = false; + } break; case ROUTER_DMAC_MASK_OFFSET: bin2bool(data & ROUTER_DMAC_MASK_BITMASK, config->dmac_mask, REMOTE_NODE_COUNT); @@ -345,7 +353,7 @@ void RouterInterface::step() { break; case RT_STATE_SR_HEAD: node_id = getNodeID(req_addr); - use_vch = config->data_vch[node_id]; + use_vch = config->data_vch[node_id - 1]; if (rtTx->slaveReady(use_vch)) { RouterUtils::make_head_flit(&flit, req_addr, MTYPE_SR, use_vch , config->router_id, getNodeID(req_addr), true); @@ -355,7 +363,7 @@ void RouterInterface::step() { break; case RT_STATE_SW_HEAD: node_id = getNodeID(req_addr); - use_vch = config->data_vch[node_id]; + use_vch = config->data_vch[node_id - 1]; if (rtTx->slaveReady(use_vch)) { RouterUtils::make_head_flit(&flit, req_addr, MTYPE_SW, use_vch, config->router_id, getNodeID(req_addr)); @@ -365,7 +373,7 @@ void RouterInterface::step() { break; case RT_STATE_BR_HEAD: node_id = getNodeID(req_addr); - use_vch = config->data_vch[node_id]; + use_vch = config->data_vch[node_id - 1]; if (rtTx->slaveReady(use_vch)) { RouterUtils::make_head_flit(&flit, req_addr, MTYPE_BR, use_vch, config->router_id, getNodeID(req_addr), true); @@ -375,7 +383,7 @@ void RouterInterface::step() { break; case RT_STATE_BW_HEAD: node_id = getNodeID(req_addr); - use_vch = config->data_vch[node_id]; + use_vch = config->data_vch[node_id - 1]; if (rtTx->slaveReady(use_vch)) { RouterUtils::make_head_flit(&flit, req_addr, MTYPE_BW, use_vch, config->router_id, getNodeID(req_addr)); diff --git a/rs232c.cc b/rs232c.cc index ee37e7f..a028551 100644 --- a/rs232c.cc +++ b/rs232c.cc @@ -13,8 +13,8 @@ void Rs232c::store_word(uint32 offset, uint32 data, DeviceExc *client) { // Write to register[2] is character output. if (offset == 0 && (data & 0x00FF0000) > 0) { - putchar((data & 0x00FF0000) >> 16); - fflush(stdout); + putc((data & 0x00FF0000) >> 16, stderr); + fflush(stderr); } // // HACK diff --git a/test_vec/Makefile b/test_vec/Makefile index 78abe7a..00a930e 100644 --- a/test_vec/Makefile +++ b/test_vec/Makefile @@ -1,6 +1,11 @@ SIMULATOR = ../cube_sim SIMFLAGS = -F ../vmipsrc +TIMEOUT_SEC = 10 +ifeq ($(which timeout), "") SIM = $(SIMULATOR) $(SIMFLAGS) +else +SIM = timeout -sKILL $(TIMEOUT_SEC) $(SIMULATOR) $(SIMFLAGS) +endif TEST_BENCH = test-adpcm test-aes test-bf test-cp_test test-gsm\ test-jpeg test-mpeg2 test-printf test-sha test-sum_asm test-router @@ -28,4 +33,4 @@ test-sha: sha.bin test-sum_asm: sum_asm.bin $(SIM) $< test-router: router_test.bin - $(SIM) -o accelerator0=RemoteRam -o accelerator1=RemoteRam -o routermsg $< \ No newline at end of file + $(SIM) -o accelerator0=RemoteRam -o accelerator1=RemoteRam -o routermsg $< diff --git a/vmips.cc b/vmips.cc index 7b6ff62..81c3e86 100644 --- a/vmips.cc +++ b/vmips.cc @@ -58,6 +58,7 @@ with VMIPS; if not, write to the Free Software Foundation, Inc., #include "routerinterface.h" #include "accelerator.h" #include "remoteram.h" +#include "cma.h" vmips *machine; @@ -86,6 +87,7 @@ vmips::refresh_options(void) opt_loadaddr = opt->option("loadaddr")->num; opt_bootaddr = opt->option("bootaddr")->num; opt_memsize = opt->option("memsize")->num; + opt_progmemsize = opt->option("progmemsize")->num; opt_timeratio = opt->option("timeratio")->num; opt_memdumpfile = opt->option("memdumpfile")->str; @@ -419,32 +421,28 @@ timediff(struct timeval *after, struct timeval *before) } bool -vmips::setup_rom () +vmips::setup_prog () { - // Open ROM image. - FILE *rom = fopen (opt_image, "rb"); - if (!rom) { - error ("Could not open ROM `%s': %s", opt_image, strerror (errno)); + // Open prog image. + FILE *bin_file = fopen (opt_image, "rb"); + if (!bin_file) { + error ("Could not open program binary `%s': %s", opt_image, strerror (errno)); return false; } // Translate loadaddr to physical address. - // opt_loadaddr -= KSEG1_CONST_TRANSLATION; - ROMModule *rm; + try { - rm = new ROMModule (rom); + mem_prog = new MemoryModule(opt_progmemsize, bin_file); } catch (int errcode) { error ("mmap failed for %s: %s", opt_image, strerror (errcode)); return false; } - // Map the ROM image to the virtual physical memory. - physmem->map_at_physical_address (rm, opt_loadaddr); + // Map the prog image to the virtual physical memory. + physmem->map_at_physical_address (mem_prog, opt_loadaddr); + + boot_msg ("Mapping program binary (%s, %u words) to physical address 0x%08x\n", + opt_image, mem_prog->getExtent () / 4, mem_prog->getBase ()); - boot_msg ("Mapping ROM image (%s, %u words) to physical address 0x%08x\n", - opt_image, rm->getExtent () / 4, rm->getBase ()); - // Point debugger at wherever the user thinks the ROM is. - if (opt_debug) - if (dbgr->setup (opt_loadaddr, rm->getExtent () / 4) < 0) - return false; // Error in setting up debugger. return true; } @@ -509,7 +507,7 @@ vmips::setup_rs232c() { Rs232c *rs232c = new Rs232c(); if (physmem->map_at_physical_address(rs232c, 0xb4000000) == 0) { - boot_msg("Suceeded in setup rs232c serial IO\n"); + boot_msg("Succeeded in setup rs232c serial IO\n"); return true; } else { boot_msg("Failed in setup rs232c serial IO\n"); @@ -529,7 +527,7 @@ vmips::setup_router() if (physmem->map_at_physical_address(rtIO, 0xba010000) == 0) { if (physmem->map_at_physical_address(rtrange_kseg0, 0xba400000) == 0) { if (physmem->map_at_physical_address(rtrange_kseg1, 0x9a400000) == 0) { - boot_msg("Suceeded in setup cube router\n"); + boot_msg("Succeeded in setup cube router\n"); } else { boot_msg("Failed in setup router range (kseg1)\n"); return false; @@ -559,8 +557,7 @@ vmips::setup_cube() //setup accelerator0 if (ac0_name == std::string("CMA")) { - fprintf(stderr, "CMA is under developping\n"); - return false; + ac0 = new CMA(1, rtif->getRouter()); } else if (ac0_name == std::string("SNACC")) { fprintf(stderr, "SNACC is under developping\n"); return false; @@ -577,8 +574,12 @@ vmips::setup_cube() //setup accelerator1 if (ac1_name == std::string("CMA")) { - fprintf(stderr, "CMA is under developping\n"); - return false; + if (ac0 != NULL) { + ac1 = new CMA(2, ac0->getRouter()); + } else { + fprintf(stderr, "Upper module (accelerator0) is not built\n"); + return false; + } } else if (ac1_name == std::string("SNACC")) { fprintf(stderr, "SNACC is under developping\n"); return false; @@ -600,14 +601,18 @@ vmips::setup_cube() //setup accelerator2 if (ac2_name == std::string("CMA")) { - fprintf(stderr, "CMA is under developping\n"); - return false; + if (ac1 != NULL) { + ac2 = new CMA(3, ac1->getRouter()); + } else { + fprintf(stderr, "Upper module (accelerator1) is not built\n"); + return false; + } } else if (ac2_name == std::string("SNACC")) { fprintf(stderr, "SNACC is under developping\n"); return false; } else if (ac2_name == std::string("RemoteRam")) { if (ac1 != NULL) { - ac2 = new RemoteRam(3, ac0->getRouter(), 0x2048); //2KB + ac2 = new RemoteRam(3, ac1->getRouter(), 0x2048); //2KB } else { fprintf(stderr, "Upper module (accelerator1) is not built\n"); return false; @@ -666,7 +671,7 @@ vmips::run() if (!setup_bootrom ()) return 1; - if (!setup_rom ()) + if (!setup_prog ()) return 1; if (!setup_ram ()) diff --git a/vmips.h b/vmips.h index 1ccc4f8..7894781 100644 --- a/vmips.h +++ b/vmips.h @@ -61,7 +61,7 @@ class vmips IntCtrl *intc; Options *opt; MemoryModule *memmod; - MemoryModule *memmod2; + MemoryModule *mem_prog; Debug *dbgr; Disassembler *disasm; bool host_bigendian; @@ -109,6 +109,7 @@ class vmips uint32 opt_loadaddr; uint32 opt_bootaddr; uint32 opt_memsize; + uint32 opt_progmemsize; uint32 opt_timeratio; char *opt_image; char *opt_boot; @@ -156,7 +157,7 @@ class vmips there are no initialization problems, otherwise return false. */ virtual bool setup_decserial(); - virtual bool setup_rom(); + virtual bool setup_prog(); virtual bool setup_bootrom();