diff options
Diffstat (limited to 'src/devices/cpu/sharc/sharcdrc.cpp')
-rw-r--r-- | src/devices/cpu/sharc/sharcdrc.cpp | 732 |
1 files changed, 364 insertions, 368 deletions
diff --git a/src/devices/cpu/sharc/sharcdrc.cpp b/src/devices/cpu/sharc/sharcdrc.cpp index c21a1c2e997..91802cc4d61 100644 --- a/src/devices/cpu/sharc/sharcdrc.cpp +++ b/src/devices/cpu/sharc/sharcdrc.cpp @@ -15,8 +15,6 @@ #include "cpu/drcuml.h" #include "cpu/drcumlsh.h" -using namespace uml; - #define USE_SWAPDQ 0 @@ -105,10 +103,10 @@ using namespace uml; #define IRAM_END 0x7ffff -inline void adsp21062_device::alloc_handle(drcuml_state *drcuml, code_handle **handleptr, const char *name) +inline void adsp21062_device::alloc_handle(uml::code_handle *&handleptr, const char *name) { - if (*handleptr == nullptr) - *handleptr = drcuml->handle_alloc(name); + if (!handleptr) + handleptr = m_drcuml->handle_alloc(name); } @@ -261,7 +259,7 @@ load_fast_iregs - load any fast integer registers -------------------------------------------------*/ -inline void adsp21062_device::load_fast_iregs(drcuml_block *block) +inline void adsp21062_device::load_fast_iregs(drcuml_block &block) { int regnum; @@ -280,7 +278,7 @@ save_fast_iregs - save any fast integer registers -------------------------------------------------*/ -void adsp21062_device::save_fast_iregs(drcuml_block *block) +void adsp21062_device::save_fast_iregs(drcuml_block &block) { int regnum; @@ -293,15 +291,15 @@ void adsp21062_device::save_fast_iregs(drcuml_block *block) } } -void adsp21062_device::static_generate_memory_accessor(MEM_ACCESSOR_TYPE type, const char *name, code_handle *&handleptr) +void adsp21062_device::static_generate_memory_accessor(MEM_ACCESSOR_TYPE type, const char *name, uml::code_handle *&handleptr) { // I0 = read/write data // I1 = address - drcuml_block *block = m_drcuml->begin_block(1024); + drcuml_block &block(m_drcuml->begin_block(1024)); // add a global entry for this - alloc_handle(m_drcuml.get(), &handleptr, name); + alloc_handle(handleptr, name); UML_HANDLE(block, *handleptr); // handle *handleptr switch (type) @@ -335,7 +333,7 @@ void adsp21062_device::static_generate_memory_accessor(MEM_ACCESSOR_TYPE type, c UML_RET(block); - block->end(); + block.end(); } void adsp21062_device::static_generate_push_pc() @@ -343,11 +341,11 @@ void adsp21062_device::static_generate_push_pc() // Push contents of I0 to PC stack // Trashes I1 - code_label label = 1; - drcuml_block *block = m_drcuml->begin_block(32); + uml::code_label label = 1; + drcuml_block &block(m_drcuml->begin_block(32)); // add a global entry for this - alloc_handle(m_drcuml.get(), &m_push_pc, "push_pc"); + alloc_handle(m_push_pc, "push_pc"); UML_HANDLE(block, *m_push_pc); // handle *m_push_pc UML_MOV(block, I1, PCSTKP); // mov i1,PCSTKP @@ -371,7 +369,7 @@ void adsp21062_device::static_generate_push_pc() UML_RET(block); - block->end(); + block.end(); } void adsp21062_device::static_generate_pop_pc() @@ -379,11 +377,11 @@ void adsp21062_device::static_generate_pop_pc() // Pop PC stack into I0 // Trashes I1 - code_label label = 1; - drcuml_block *block = m_drcuml->begin_block(32); + uml::code_label label = 1; + drcuml_block &block(m_drcuml->begin_block(32)); // add a global entry for this - alloc_handle(m_drcuml.get(), &m_pop_pc, "pop_pc"); + alloc_handle(m_pop_pc, "pop_pc"); UML_HANDLE(block, *m_pop_pc); // handle *m_pop_pc UML_MOV(block, I1, PCSTKP); // mov i0,PCSTKP @@ -407,7 +405,7 @@ void adsp21062_device::static_generate_pop_pc() UML_RET(block); - block->end(); + block.end(); } void adsp21062_device::static_generate_push_loop() @@ -416,11 +414,11 @@ void adsp21062_device::static_generate_push_loop() // I1 = type/condition/addr // Trashes I2 - code_label label = 1; - drcuml_block *block = m_drcuml->begin_block(32); + uml::code_label label = 1; + drcuml_block &block(m_drcuml->begin_block(32)); // add a global entry for this - alloc_handle(m_drcuml.get(), &m_push_loop, "push_loop"); + alloc_handle(m_push_loop, "push_loop"); UML_HANDLE(block, *m_push_loop); // handle *m_push_loop UML_MOV(block, I2, LSTKP); // mov i2,LSTKP @@ -446,18 +444,18 @@ void adsp21062_device::static_generate_push_loop() UML_RET(block); - block->end(); + block.end(); } void adsp21062_device::static_generate_pop_loop() { // Trashes I0,I2 - code_label label = 1; - drcuml_block *block = m_drcuml->begin_block(32); + uml::code_label label = 1; + drcuml_block &block(m_drcuml->begin_block(32)); // add a global entry for this - alloc_handle(m_drcuml.get(), &m_pop_loop, "pop_loop"); + alloc_handle(m_pop_loop, "pop_loop"); UML_HANDLE(block, *m_pop_loop); // handle *m_pop_loop UML_MOV(block, I2, LSTKP); // mov i2,LSTKP @@ -481,18 +479,18 @@ void adsp21062_device::static_generate_pop_loop() UML_RET(block); - block->end(); + block.end(); } void adsp21062_device::static_generate_push_status() { // Trashes I2 - code_label label = 1; - drcuml_block *block = m_drcuml->begin_block(32); + uml::code_label label = 1; + drcuml_block &block(m_drcuml->begin_block(32)); // add a global entry for this - alloc_handle(m_drcuml.get(), &m_push_status, "push_status"); + alloc_handle(m_push_status, "push_status"); UML_HANDLE(block, *m_push_status); // handle *m_push_status UML_MOV(block, I2, mem(&m_core->status_stkp)); // mov i2,[status_stkp] @@ -517,18 +515,18 @@ void adsp21062_device::static_generate_push_status() UML_RET(block); - block->end(); + block.end(); } void adsp21062_device::static_generate_pop_status() { // Trashes I2 - code_label label = 1; - drcuml_block *block = m_drcuml->begin_block(32); + uml::code_label label = 1; + drcuml_block &block(m_drcuml->begin_block(32)); // add a global entry for this - alloc_handle(m_drcuml.get(), &m_pop_status, "pop_status"); + alloc_handle(m_pop_status, "pop_status"); UML_HANDLE(block, *m_pop_status); // handle *m_pop_status //TODO: store MODE1 @@ -553,23 +551,23 @@ void adsp21062_device::static_generate_pop_status() UML_RET(block); - block->end(); + block.end(); } void adsp21062_device::static_generate_exception(uint8_t exception, const char *name) { - code_handle *&exception_handle = m_exception[exception]; + uml::code_handle *&exception_handle = m_exception[exception]; - code_label label = 1; + uml::code_label label = 1; - code_label label_nopush = label++; + uml::code_label const label_nopush = label++; /* begin generating */ - drcuml_block *block = m_drcuml->begin_block(1024); + drcuml_block &block(m_drcuml->begin_block(1024)); /* add a global entry for this */ - alloc_handle(m_drcuml.get(), &exception_handle, name); + alloc_handle(exception_handle, name); UML_HANDLE(block, *exception_handle); // handle name UML_AND(block, I3, mem(&m_core->irq_pending), IMASK); // and i3,[irq_pending],IMASK @@ -595,180 +593,185 @@ void adsp21062_device::static_generate_exception(uint8_t exception, const char * UML_ADD(block, I0, I0, 0x20000); // add i0,0x20000 UML_HASHJMP(block, 0, I0, *m_nocode); // hashjmp i0,m_nocode - block->end(); + block.end(); } void adsp21062_device::static_generate_mode1_ops() { - drcuml_block *block; - // TODO: these could be further optimized with 64-bit or 128-bit swaps // e.g SWAP128 instruction (swap 128 bits between 2 memory locations) - block = m_drcuml->begin_block(128); - alloc_handle(m_drcuml.get(), &m_swap_dag1_0_3, "swap_dag1_0_3"); - UML_HANDLE(block, *m_swap_dag1_0_3); // handle name -#if !USE_SWAPDQ - for (int i = 0; i < 4; i++) { - UML_MOV(block, I0, mem(&m_core->dag1.i[i])); - UML_MOV(block, I1, mem(&m_core->dag1_alt.i[i])); - UML_MOV(block, mem(&m_core->dag1.i[i]), I1); - UML_MOV(block, mem(&m_core->dag1_alt.i[i]), I0); - UML_MOV(block, I0, mem(&m_core->dag1.m[i])); - UML_MOV(block, I1, mem(&m_core->dag1_alt.m[i])); - UML_MOV(block, mem(&m_core->dag1.m[i]), I1); - UML_MOV(block, mem(&m_core->dag1_alt.m[i]), I0); - UML_MOV(block, I0, mem(&m_core->dag1.l[i])); - UML_MOV(block, I1, mem(&m_core->dag1_alt.l[i])); - UML_MOV(block, mem(&m_core->dag1.l[i]), I1); - UML_MOV(block, mem(&m_core->dag1_alt.l[i]), I0); - UML_MOV(block, I0, mem(&m_core->dag1.b[i])); - UML_MOV(block, I1, mem(&m_core->dag1_alt.b[i])); - UML_MOV(block, mem(&m_core->dag1.b[i]), I1); - UML_MOV(block, mem(&m_core->dag1_alt.b[i]), I0); - } + drcuml_block &block(m_drcuml->begin_block(128)); + alloc_handle(m_swap_dag1_0_3, "swap_dag1_0_3"); + UML_HANDLE(block, *m_swap_dag1_0_3); // handle name +#if !USE_SWAPDQ + for (int i = 0; i < 4; i++) + { + UML_MOV(block, I0, mem(&m_core->dag1.i[i])); + UML_MOV(block, I1, mem(&m_core->dag1_alt.i[i])); + UML_MOV(block, mem(&m_core->dag1.i[i]), I1); + UML_MOV(block, mem(&m_core->dag1_alt.i[i]), I0); + UML_MOV(block, I0, mem(&m_core->dag1.m[i])); + UML_MOV(block, I1, mem(&m_core->dag1_alt.m[i])); + UML_MOV(block, mem(&m_core->dag1.m[i]), I1); + UML_MOV(block, mem(&m_core->dag1_alt.m[i]), I0); + UML_MOV(block, I0, mem(&m_core->dag1.l[i])); + UML_MOV(block, I1, mem(&m_core->dag1_alt.l[i])); + UML_MOV(block, mem(&m_core->dag1.l[i]), I1); + UML_MOV(block, mem(&m_core->dag1_alt.l[i]), I0); + UML_MOV(block, I0, mem(&m_core->dag1.b[i])); + UML_MOV(block, I1, mem(&m_core->dag1_alt.b[i])); + UML_MOV(block, mem(&m_core->dag1.b[i]), I1); + UML_MOV(block, mem(&m_core->dag1_alt.b[i]), I0); + } #else - UML_SWAPDQ(block, mem(&m_core->dag1.i[0]), mem(&m_core->dag1_alt.i[0])); - UML_SWAPDQ(block, mem(&m_core->dag1.m[0]), mem(&m_core->dag1_alt.m[0])); - UML_SWAPDQ(block, mem(&m_core->dag1.l[0]), mem(&m_core->dag1_alt.l[0])); - UML_SWAPDQ(block, mem(&m_core->dag1.b[0]), mem(&m_core->dag1_alt.b[0])); + UML_SWAPDQ(block, mem(&m_core->dag1.i[0]), mem(&m_core->dag1_alt.i[0])); + UML_SWAPDQ(block, mem(&m_core->dag1.m[0]), mem(&m_core->dag1_alt.m[0])); + UML_SWAPDQ(block, mem(&m_core->dag1.l[0]), mem(&m_core->dag1_alt.l[0])); + UML_SWAPDQ(block, mem(&m_core->dag1.b[0]), mem(&m_core->dag1_alt.b[0])); #endif - UML_RET(block); - block->end(); - - block = m_drcuml->begin_block(128); - alloc_handle(m_drcuml.get(), &m_swap_dag1_4_7, "swap_dag1_4_7"); - UML_HANDLE(block, *m_swap_dag1_4_7); // handle name -#if !USE_SWAPDQ - for (int i = 4; i < 8; i++) - { - UML_MOV(block, I0, mem(&m_core->dag1.i[i])); - UML_MOV(block, I1, mem(&m_core->dag1_alt.i[i])); - UML_MOV(block, mem(&m_core->dag1.i[i]), I1); - UML_MOV(block, mem(&m_core->dag1_alt.i[i]), I0); - UML_MOV(block, I0, mem(&m_core->dag1.m[i])); - UML_MOV(block, I1, mem(&m_core->dag1_alt.m[i])); - UML_MOV(block, mem(&m_core->dag1.m[i]), I1); - UML_MOV(block, mem(&m_core->dag1_alt.m[i]), I0); - UML_MOV(block, I0, mem(&m_core->dag1.l[i])); - UML_MOV(block, I1, mem(&m_core->dag1_alt.l[i])); - UML_MOV(block, mem(&m_core->dag1.l[i]), I1); - UML_MOV(block, mem(&m_core->dag1_alt.l[i]), I0); - UML_MOV(block, I0, mem(&m_core->dag1.b[i])); - UML_MOV(block, I1, mem(&m_core->dag1_alt.b[i])); - UML_MOV(block, mem(&m_core->dag1.b[i]), I1); - UML_MOV(block, mem(&m_core->dag1_alt.b[i]), I0); + UML_RET(block); + block.end(); } + { + drcuml_block &block(m_drcuml->begin_block(128)); + alloc_handle(m_swap_dag1_4_7, "swap_dag1_4_7"); + UML_HANDLE(block, *m_swap_dag1_4_7); // handle name +#if !USE_SWAPDQ + for (int i = 4; i < 8; i++) + { + UML_MOV(block, I0, mem(&m_core->dag1.i[i])); + UML_MOV(block, I1, mem(&m_core->dag1_alt.i[i])); + UML_MOV(block, mem(&m_core->dag1.i[i]), I1); + UML_MOV(block, mem(&m_core->dag1_alt.i[i]), I0); + UML_MOV(block, I0, mem(&m_core->dag1.m[i])); + UML_MOV(block, I1, mem(&m_core->dag1_alt.m[i])); + UML_MOV(block, mem(&m_core->dag1.m[i]), I1); + UML_MOV(block, mem(&m_core->dag1_alt.m[i]), I0); + UML_MOV(block, I0, mem(&m_core->dag1.l[i])); + UML_MOV(block, I1, mem(&m_core->dag1_alt.l[i])); + UML_MOV(block, mem(&m_core->dag1.l[i]), I1); + UML_MOV(block, mem(&m_core->dag1_alt.l[i]), I0); + UML_MOV(block, I0, mem(&m_core->dag1.b[i])); + UML_MOV(block, I1, mem(&m_core->dag1_alt.b[i])); + UML_MOV(block, mem(&m_core->dag1.b[i]), I1); + UML_MOV(block, mem(&m_core->dag1_alt.b[i]), I0); + } #else - UML_SWAPDQ(block, mem(&m_core->dag1.i[4]), mem(&m_core->dag1_alt.i[4])); - UML_SWAPDQ(block, mem(&m_core->dag1.m[4]), mem(&m_core->dag1_alt.m[4])); - UML_SWAPDQ(block, mem(&m_core->dag1.l[4]), mem(&m_core->dag1_alt.l[4])); - UML_SWAPDQ(block, mem(&m_core->dag1.b[4]), mem(&m_core->dag1_alt.b[4])); + UML_SWAPDQ(block, mem(&m_core->dag1.i[4]), mem(&m_core->dag1_alt.i[4])); + UML_SWAPDQ(block, mem(&m_core->dag1.m[4]), mem(&m_core->dag1_alt.m[4])); + UML_SWAPDQ(block, mem(&m_core->dag1.l[4]), mem(&m_core->dag1_alt.l[4])); + UML_SWAPDQ(block, mem(&m_core->dag1.b[4]), mem(&m_core->dag1_alt.b[4])); #endif - UML_RET(block); - block->end(); - - block = m_drcuml->begin_block(128); - alloc_handle(m_drcuml.get(), &m_swap_dag2_0_3, "swap_dag2_0_3"); - UML_HANDLE(block, *m_swap_dag2_0_3); // handle name -#if !USE_SWAPDQ - for (int i = 0; i < 4; i++) - { - UML_MOV(block, I0, mem(&m_core->dag2.i[i])); - UML_MOV(block, I1, mem(&m_core->dag2_alt.i[i])); - UML_MOV(block, mem(&m_core->dag2.i[i]), I1); - UML_MOV(block, mem(&m_core->dag2_alt.i[i]), I0); - UML_MOV(block, I0, mem(&m_core->dag2.m[i])); - UML_MOV(block, I1, mem(&m_core->dag2_alt.m[i])); - UML_MOV(block, mem(&m_core->dag2.m[i]), I1); - UML_MOV(block, mem(&m_core->dag2_alt.m[i]), I0); - UML_MOV(block, I0, mem(&m_core->dag2.l[i])); - UML_MOV(block, I1, mem(&m_core->dag2_alt.l[i])); - UML_MOV(block, mem(&m_core->dag2.l[i]), I1); - UML_MOV(block, mem(&m_core->dag2_alt.l[i]), I0); - UML_MOV(block, I0, mem(&m_core->dag2.b[i])); - UML_MOV(block, I1, mem(&m_core->dag2_alt.b[i])); - UML_MOV(block, mem(&m_core->dag2.b[i]), I1); - UML_MOV(block, mem(&m_core->dag2_alt.b[i]), I0); + UML_RET(block); + block.end(); } + { + drcuml_block &block(m_drcuml->begin_block(128)); + alloc_handle(m_swap_dag2_0_3, "swap_dag2_0_3"); + UML_HANDLE(block, *m_swap_dag2_0_3); // handle name +#if !USE_SWAPDQ + for (int i = 0; i < 4; i++) + { + UML_MOV(block, I0, mem(&m_core->dag2.i[i])); + UML_MOV(block, I1, mem(&m_core->dag2_alt.i[i])); + UML_MOV(block, mem(&m_core->dag2.i[i]), I1); + UML_MOV(block, mem(&m_core->dag2_alt.i[i]), I0); + UML_MOV(block, I0, mem(&m_core->dag2.m[i])); + UML_MOV(block, I1, mem(&m_core->dag2_alt.m[i])); + UML_MOV(block, mem(&m_core->dag2.m[i]), I1); + UML_MOV(block, mem(&m_core->dag2_alt.m[i]), I0); + UML_MOV(block, I0, mem(&m_core->dag2.l[i])); + UML_MOV(block, I1, mem(&m_core->dag2_alt.l[i])); + UML_MOV(block, mem(&m_core->dag2.l[i]), I1); + UML_MOV(block, mem(&m_core->dag2_alt.l[i]), I0); + UML_MOV(block, I0, mem(&m_core->dag2.b[i])); + UML_MOV(block, I1, mem(&m_core->dag2_alt.b[i])); + UML_MOV(block, mem(&m_core->dag2.b[i]), I1); + UML_MOV(block, mem(&m_core->dag2_alt.b[i]), I0); + } #else - UML_SWAPDQ(block, mem(&m_core->dag2.i[0]), mem(&m_core->dag2_alt.i[0])); - UML_SWAPDQ(block, mem(&m_core->dag2.m[0]), mem(&m_core->dag2_alt.m[0])); - UML_SWAPDQ(block, mem(&m_core->dag2.l[0]), mem(&m_core->dag2_alt.l[0])); - UML_SWAPDQ(block, mem(&m_core->dag2.b[0]), mem(&m_core->dag2_alt.b[0])); + UML_SWAPDQ(block, mem(&m_core->dag2.i[0]), mem(&m_core->dag2_alt.i[0])); + UML_SWAPDQ(block, mem(&m_core->dag2.m[0]), mem(&m_core->dag2_alt.m[0])); + UML_SWAPDQ(block, mem(&m_core->dag2.l[0]), mem(&m_core->dag2_alt.l[0])); + UML_SWAPDQ(block, mem(&m_core->dag2.b[0]), mem(&m_core->dag2_alt.b[0])); #endif - UML_RET(block); - block->end(); - - block = m_drcuml->begin_block(128); - alloc_handle(m_drcuml.get(), &m_swap_dag2_4_7, "swap_dag2_4_7"); - UML_HANDLE(block, *m_swap_dag2_4_7); // handle name -#if !USE_SWAPDQ - for (int i = 4; i < 8; i++) - { - UML_MOV(block, I0, mem(&m_core->dag2.i[i])); - UML_MOV(block, I1, mem(&m_core->dag2_alt.i[i])); - UML_MOV(block, mem(&m_core->dag2.i[i]), I1); - UML_MOV(block, mem(&m_core->dag2_alt.i[i]), I0); - UML_MOV(block, I0, mem(&m_core->dag2.m[i])); - UML_MOV(block, I1, mem(&m_core->dag2_alt.m[i])); - UML_MOV(block, mem(&m_core->dag2.m[i]), I1); - UML_MOV(block, mem(&m_core->dag2_alt.m[i]), I0); - UML_MOV(block, I0, mem(&m_core->dag2.l[i])); - UML_MOV(block, I1, mem(&m_core->dag2_alt.l[i])); - UML_MOV(block, mem(&m_core->dag2.l[i]), I1); - UML_MOV(block, mem(&m_core->dag2_alt.l[i]), I0); - UML_MOV(block, I0, mem(&m_core->dag2.b[i])); - UML_MOV(block, I1, mem(&m_core->dag2_alt.b[i])); - UML_MOV(block, mem(&m_core->dag2.b[i]), I1); - UML_MOV(block, mem(&m_core->dag2_alt.b[i]), I0); + UML_RET(block); + block.end(); } + { + drcuml_block &block(m_drcuml->begin_block(128)); + alloc_handle(m_swap_dag2_4_7, "swap_dag2_4_7"); + UML_HANDLE(block, *m_swap_dag2_4_7); // handle name +#if !USE_SWAPDQ + for (int i = 4; i < 8; i++) + { + UML_MOV(block, I0, mem(&m_core->dag2.i[i])); + UML_MOV(block, I1, mem(&m_core->dag2_alt.i[i])); + UML_MOV(block, mem(&m_core->dag2.i[i]), I1); + UML_MOV(block, mem(&m_core->dag2_alt.i[i]), I0); + UML_MOV(block, I0, mem(&m_core->dag2.m[i])); + UML_MOV(block, I1, mem(&m_core->dag2_alt.m[i])); + UML_MOV(block, mem(&m_core->dag2.m[i]), I1); + UML_MOV(block, mem(&m_core->dag2_alt.m[i]), I0); + UML_MOV(block, I0, mem(&m_core->dag2.l[i])); + UML_MOV(block, I1, mem(&m_core->dag2_alt.l[i])); + UML_MOV(block, mem(&m_core->dag2.l[i]), I1); + UML_MOV(block, mem(&m_core->dag2_alt.l[i]), I0); + UML_MOV(block, I0, mem(&m_core->dag2.b[i])); + UML_MOV(block, I1, mem(&m_core->dag2_alt.b[i])); + UML_MOV(block, mem(&m_core->dag2.b[i]), I1); + UML_MOV(block, mem(&m_core->dag2_alt.b[i]), I0); + } #else - UML_SWAPDQ(block, mem(&m_core->dag2.i[4]), mem(&m_core->dag2_alt.i[4])); - UML_SWAPDQ(block, mem(&m_core->dag2.m[4]), mem(&m_core->dag2_alt.m[4])); - UML_SWAPDQ(block, mem(&m_core->dag2.l[4]), mem(&m_core->dag2_alt.l[4])); - UML_SWAPDQ(block, mem(&m_core->dag2.b[4]), mem(&m_core->dag2_alt.b[4])); + UML_SWAPDQ(block, mem(&m_core->dag2.i[4]), mem(&m_core->dag2_alt.i[4])); + UML_SWAPDQ(block, mem(&m_core->dag2.m[4]), mem(&m_core->dag2_alt.m[4])); + UML_SWAPDQ(block, mem(&m_core->dag2.l[4]), mem(&m_core->dag2_alt.l[4])); + UML_SWAPDQ(block, mem(&m_core->dag2.b[4]), mem(&m_core->dag2_alt.b[4])); #endif - UML_RET(block); - block->end(); - - block = m_drcuml->begin_block(64); - alloc_handle(m_drcuml.get(), &m_swap_r0_7, "swap_r0_7"); - UML_HANDLE(block, *m_swap_r0_7); // handle name -#if !USE_SWAPDQ - for (int i = 0; i < 8; i++) - { - UML_MOV(block, I0, mem(&m_core->r[i])); - UML_MOV(block, I1, mem(&m_core->reg_alt[i])); - UML_MOV(block, mem(&m_core->r[i]), I1); - UML_MOV(block, mem(&m_core->reg_alt[i]), I0); + UML_RET(block); + block.end(); } + { + drcuml_block &block(m_drcuml->begin_block(64)); + alloc_handle(m_swap_r0_7, "swap_r0_7"); + UML_HANDLE(block, *m_swap_r0_7); // handle name +#if !USE_SWAPDQ + for (int i = 0; i < 8; i++) + { + UML_MOV(block, I0, mem(&m_core->r[i])); + UML_MOV(block, I1, mem(&m_core->reg_alt[i])); + UML_MOV(block, mem(&m_core->r[i]), I1); + UML_MOV(block, mem(&m_core->reg_alt[i]), I0); + } #else - UML_SWAPDQ(block, mem(&m_core->r[0]), mem(&m_core->reg_alt[0])); - UML_SWAPDQ(block, mem(&m_core->r[4]), mem(&m_core->reg_alt[4])); + UML_SWAPDQ(block, mem(&m_core->r[0]), mem(&m_core->reg_alt[0])); + UML_SWAPDQ(block, mem(&m_core->r[4]), mem(&m_core->reg_alt[4])); #endif - UML_RET(block); - block->end(); - - block = m_drcuml->begin_block(64); - alloc_handle(m_drcuml.get(), &m_swap_r8_15, "swap_r8_15"); - UML_HANDLE(block, *m_swap_r8_15); // handle name -#if !USE_SWAPDQ - for (int i = 8; i < 16; i++) - { - UML_MOV(block, I0, mem(&m_core->r[i])); - UML_MOV(block, I1, mem(&m_core->reg_alt[i])); - UML_MOV(block, mem(&m_core->r[i]), I1); - UML_MOV(block, mem(&m_core->reg_alt[i]), I0); + UML_RET(block); + block.end(); } + { + drcuml_block &block(m_drcuml->begin_block(64)); + alloc_handle(m_swap_r8_15, "swap_r8_15"); + UML_HANDLE(block, *m_swap_r8_15); // handle name +#if !USE_SWAPDQ + for (int i = 8; i < 16; i++) + { + UML_MOV(block, I0, mem(&m_core->r[i])); + UML_MOV(block, I1, mem(&m_core->reg_alt[i])); + UML_MOV(block, mem(&m_core->r[i]), I1); + UML_MOV(block, mem(&m_core->reg_alt[i]), I0); + } #else - UML_SWAPDQ(block, mem(&m_core->r[8]), mem(&m_core->reg_alt[8])); - UML_SWAPDQ(block, mem(&m_core->r[12]), mem(&m_core->reg_alt[12])); + UML_SWAPDQ(block, mem(&m_core->r[8]), mem(&m_core->reg_alt[8])); + UML_SWAPDQ(block, mem(&m_core->r[12]), mem(&m_core->reg_alt[12])); #endif - UML_RET(block); - block->end(); + UML_RET(block); + block.end(); + } } @@ -819,8 +822,6 @@ void adsp21062_device::compile_block(offs_t pc) const opcode_desc *desclist; bool override = false; - drcuml_block *block; - desclist = m_drcfe->describe_code(pc); bool succeeded = false; @@ -828,7 +829,7 @@ void adsp21062_device::compile_block(offs_t pc) { try { - block = m_drcuml->begin_block(4096); + drcuml_block &block(m_drcuml->begin_block(4096)); for (seqhead = desclist; seqhead != nullptr; seqhead = seqlast->next()) { @@ -867,7 +868,7 @@ void adsp21062_device::compile_block(offs_t pc) /* iterate over instructions in the sequence and compile them */ for (curdesc = seqhead; curdesc != seqlast->next(); curdesc = curdesc->next()) - generate_sequence_instruction(block, &compiler, curdesc, false); + generate_sequence_instruction(block, compiler, curdesc, false); /* if we need to return to the start, do it */ if (seqlast->flags & OPFLAG_RETURN_TO_START) @@ -886,13 +887,13 @@ void adsp21062_device::compile_block(offs_t pc) /* count off cycles and go there */ - generate_update_cycles(block, &compiler, nextpc, true); // <subtract cycles> + generate_update_cycles(block, compiler, nextpc, true); // <subtract cycles> if (seqlast->next() == nullptr || seqlast->next()->pc != nextpc) UML_HASHJMP(block, 0, nextpc, *m_nocode); // hashjmp <mode>,nextpc,nocode } - block->end(); + block.end(); succeeded = true; } catch (drcuml_block::abort_compilation &) @@ -944,17 +945,16 @@ void adsp21062_device::flush_cache() void adsp21062_device::static_generate_entry_point() { - code_label skip = 1; - drcuml_block *block; + uml::code_label const skip = 1; /* begin generating */ - block = m_drcuml->begin_block(20); + drcuml_block &block(m_drcuml->begin_block(20)); /* forward references */ - alloc_handle(m_drcuml.get(), &m_nocode, "nocode"); - alloc_handle(m_drcuml.get(), &m_exception[EXCEPTION_INTERRUPT], "exception_interrupt"); + alloc_handle(m_nocode, "nocode"); + alloc_handle(m_exception[EXCEPTION_INTERRUPT], "exception_interrupt"); - alloc_handle(m_drcuml.get(), &m_entry, "entry"); + alloc_handle(m_entry, "entry"); UML_HANDLE(block, *m_entry); // handle entry load_fast_iregs(block); // <load fastregs> @@ -978,48 +978,44 @@ void adsp21062_device::static_generate_entry_point() /* generate a hash jump via the current mode and PC */ UML_HASHJMP(block, 0, mem(&m_core->pc), *m_nocode); // hashjmp <mode>,<pc>,nocode - block->end(); + block.end(); } void adsp21062_device::static_generate_nocode_handler() { - drcuml_block *block; - /* begin generating */ - block = m_drcuml->begin_block(10); + drcuml_block &block(m_drcuml->begin_block(10)); /* generate a hash jump via the current mode and PC */ - alloc_handle(m_drcuml.get(), &m_nocode, "nocode"); + alloc_handle(m_nocode, "nocode"); UML_HANDLE(block, *m_nocode); // handle nocode UML_GETEXP(block, I0); // getexp i0 UML_MOV(block, mem(&m_core->pc), I0); // mov [pc],i0 save_fast_iregs(block); // <save fastregs> UML_EXIT(block, EXECUTE_MISSING_CODE); // exit EXECUTE_MISSING_CODE - block->end(); + block.end(); } void adsp21062_device::static_generate_out_of_cycles() { - drcuml_block *block; - /* begin generating */ - block = m_drcuml->begin_block(10); + drcuml_block &block(m_drcuml->begin_block(10)); /* generate a hash jump via the current mode and PC */ - alloc_handle(m_drcuml.get(), &m_out_of_cycles, "out_of_cycles"); + alloc_handle(m_out_of_cycles, "out_of_cycles"); UML_HANDLE(block, *m_out_of_cycles); // handle out_of_cycles UML_GETEXP(block, I0); // getexp i0 UML_MOV(block, mem(&m_core->pc), I0); // mov <pc>,i0 save_fast_iregs(block); // <save fastregs> UML_EXIT(block, EXECUTE_OUT_OF_CYCLES); // exit EXECUTE_OUT_OF_CYCLES - block->end(); + block.end(); } -void adsp21062_device::generate_sequence_instruction(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, bool last_delayslot) +void adsp21062_device::generate_sequence_instruction(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc, bool last_delayslot) { /* add an entry for the log */ // if (m_drcuml->logging() && !(desc->flags & OPFLAG_VIRTUAL_NOOP)) @@ -1029,10 +1025,10 @@ void adsp21062_device::generate_sequence_instruction(drcuml_block *block, compil UML_MAPVAR(block, MAPVAR_PC, desc->pc); // mapvar PC,desc->pc /* accumulate total cycles */ - compiler->cycles += desc->cycles; + compiler.cycles += desc->cycles; /* update the icount map variable */ - UML_MAPVAR(block, MAPVAR_CYCLES, compiler->cycles); // mapvar CYCLES,compiler->cycles + UML_MAPVAR(block, MAPVAR_CYCLES, compiler.cycles); // mapvar CYCLES,compiler.cycles /* if we are debugging, call the debugger */ if ((machine().debug_flags & DEBUG_FLAG_ENABLED) != 0) @@ -1055,12 +1051,12 @@ void adsp21062_device::generate_sequence_instruction(drcuml_block *block, compil { if (desc->userflags & OP_USERFLAG_COUNTER_LOOP) { - code_label end = compiler->labelnum++; + uml::code_label const end = compiler.labelnum++; UML_LOAD(block, I0, m_core->lastack, LSTKP, SIZE_DWORD, SCALE_x4); UML_CMP(block, I0, desc->pc); UML_JMPc(block, COND_NE, end); - code_label label_expire = compiler->labelnum++; + uml::code_label const label_expire = compiler.labelnum++; UML_MOV(block, I1, mem(&m_core->lstkp)); // mov i1,[m_core->lstkp] UML_LOAD(block, I0, m_core->lcstack, I1, SIZE_DWORD, SCALE_x4); // load i0,m_core->lcstack,i1,dword,scale_x4 UML_SUB(block, I0, I0, 1); // sub i0,1 @@ -1080,12 +1076,12 @@ void adsp21062_device::generate_sequence_instruction(drcuml_block *block, compil } if (desc->userflags & OP_USERFLAG_COND_LOOP) { - code_label end = compiler->labelnum++; + uml::code_label const end = compiler.labelnum++; UML_LOAD(block, I0, m_core->lastack, LSTKP, SIZE_DWORD, SCALE_x4); UML_CMP(block, I0, desc->pc); UML_JMPc(block, COND_NE, end); - code_label label_expire = compiler->labelnum++; + uml::code_label const label_expire = compiler.labelnum++; int condition = (desc->userflags & OP_USERFLAG_COND_FIELD) >> OP_USERFLAG_COND_FIELD_SHIFT; generate_do_condition(block, compiler, desc, condition, label_expire, m_core->astat_delay_copy); @@ -1119,29 +1115,29 @@ void adsp21062_device::generate_sequence_instruction(drcuml_block *block, compil // insert delayed MODE1 operation if needed - if (compiler->mode1_delay.counter > 0) + if (compiler.mode1_delay.counter > 0) { - compiler->mode1_delay.counter--; + compiler.mode1_delay.counter--; // delayed operation in the last delay slot needs to be done before the branch is taken if (last_delayslot) - compiler->mode1_delay.counter = 0; + compiler.mode1_delay.counter = 0; - if (compiler->mode1_delay.counter <= 0) + if (compiler.mode1_delay.counter <= 0) { - switch (compiler->mode1_delay.mode) + switch (compiler.mode1_delay.mode) { case MODE1_WRITE_IMM: - generate_write_mode1_imm(block, compiler, desc, compiler->mode1_delay.data); + generate_write_mode1_imm(block, compiler, desc, compiler.mode1_delay.data); break; case MODE1_WRITE_REG: fatalerror("MODE1 delay REG"); break; case MODE1_SET: - generate_set_mode1_imm(block, compiler, desc, compiler->mode1_delay.data); + generate_set_mode1_imm(block, compiler, desc, compiler.mode1_delay.data); break; case MODE1_CLEAR: - generate_clear_mode1_imm(block, compiler, desc, compiler->mode1_delay.data); + generate_clear_mode1_imm(block, compiler, desc, compiler.mode1_delay.data); break; case MODE1_TOGGLE: fatalerror("MODE1 delay TOGGLE"); @@ -1154,12 +1150,12 @@ void adsp21062_device::generate_sequence_instruction(drcuml_block *block, compil // insert loop check at this instruction if needed if (desc->userflags & OP_USERFLAG_COUNTER_LOOP) { - code_label label_skip_loop = compiler->labelnum++; + uml::code_label const label_skip_loop = compiler.labelnum++; UML_LOAD(block, I0, m_core->lastack, LSTKP, SIZE_DWORD, SCALE_x4); UML_CMP(block, I0, desc->pc); UML_JMPc(block, COND_NE, label_skip_loop); - code_label label_expire = compiler->labelnum++; + uml::code_label const label_expire = compiler.labelnum++; UML_MOV(block, I1, mem(&m_core->lstkp)); // mov i1,[m_core->lstkp] UML_LOAD(block, I0, m_core->lcstack, I1, SIZE_DWORD, SCALE_x4); // load i0,m_core->lcstack,i1,dword,scale_x4 UML_SUB(block, I0, I0, 1); // sub i0,1 @@ -1177,12 +1173,12 @@ void adsp21062_device::generate_sequence_instruction(drcuml_block *block, compil } if (desc->userflags & OP_USERFLAG_COND_LOOP) { - code_label label_skip_loop = compiler->labelnum++; + uml::code_label const label_skip_loop = compiler.labelnum++; UML_LOAD(block, I0, m_core->lastack, LSTKP, SIZE_DWORD, SCALE_x4); UML_CMP(block, I0, desc->pc); UML_JMPc(block, COND_NE, label_skip_loop); - code_label label_expire = compiler->labelnum++; + uml::code_label const label_expire = compiler.labelnum++; int condition = (desc->userflags & OP_USERFLAG_COND_FIELD) >> OP_USERFLAG_COND_FIELD_SHIFT; generate_do_condition(block, compiler, desc, condition, label_expire, m_core->astat_delay_copy); @@ -1220,13 +1216,13 @@ void adsp21062_device::generate_sequence_instruction(drcuml_block *block, compil } } -void adsp21062_device::generate_update_cycles(drcuml_block *block, compiler_state *compiler, uml::parameter param, bool allow_exception) +void adsp21062_device::generate_update_cycles(drcuml_block &block, compiler_state &compiler, uml::parameter param, bool allow_exception) { /* check full interrupts if pending */ - if (compiler->checkints) + if (compiler.checkints) { - code_label skip = compiler->labelnum++; - compiler->checkints = false; + uml::code_label const skip = compiler.labelnum++; + compiler.checkints = false; UML_CMP(block, mem(&m_core->irq_pending), 0); // cmp [irq_pending],0 UML_JMPc(block, COND_E, skip); // je skip @@ -1238,26 +1234,26 @@ void adsp21062_device::generate_update_cycles(drcuml_block *block, compiler_stat UML_JMPc(block, COND_Z, skip); // jz skip UML_MOV(block, I0, param); // mov i0,nextpc - UML_MOV(block, I1, compiler->cycles); // mov i1,cycles + UML_MOV(block, I1, compiler.cycles); // mov i1,cycles UML_CALLH(block, *m_exception[EXCEPTION_INTERRUPT]); // callh m_exception[EXCEPTION_INTERRUPT] UML_LABEL(block, skip); } /* account for cycles */ - if (compiler->cycles > 0) + if (compiler.cycles > 0) { UML_SUB(block, mem(&m_core->icount), mem(&m_core->icount), MAPVAR_CYCLES); // sub icount,icount,cycles UML_MAPVAR(block, MAPVAR_CYCLES, 0); // mapvar cycles,0 if (allow_exception) UML_EXHc(block, COND_S, *m_out_of_cycles, param); // exh out_of_cycles,nextpc } - compiler->cycles = 0; + compiler.cycles = 0; } -void adsp21062_device::generate_write_mode1_imm(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, uint32_t data) +void adsp21062_device::generate_write_mode1_imm(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc, uint32_t data) { - code_label skip; + uml::code_label skip; // TODO: swap effects if (data & 0x1) @@ -1268,42 +1264,42 @@ void adsp21062_device::generate_write_mode1_imm(drcuml_block *block, compiler_st fatalerror("generate_write_mode1_imm: tried to enable MR alternate"); // DAG1 regs 4-7 - skip = compiler->labelnum++; + skip = compiler.labelnum++; UML_TEST(block, MODE1, 0x8); UML_JMPc(block, (data & 0x8) ? COND_NZ : COND_Z, skip); // don't swap if the bits are same UML_CALLH(block, *m_swap_dag1_4_7); UML_LABEL(block, skip); // DAG1 regs 0-3 - skip = compiler->labelnum++; + skip = compiler.labelnum++; UML_TEST(block, MODE1, 0x10); UML_JMPc(block, (data & 0x10) ? COND_NZ : COND_Z, skip); // don't swap if the bits are same UML_CALLH(block, *m_swap_dag1_0_3); UML_LABEL(block, skip); // DAG2 regs 4-7 - skip = compiler->labelnum++; + skip = compiler.labelnum++; UML_TEST(block, MODE1, 0x20); UML_JMPc(block, (data & 0x20) ? COND_NZ : COND_Z, skip); // don't swap if the bits are same UML_CALLH(block, *m_swap_dag2_4_7); UML_LABEL(block, skip); // DAG2 regs 0-3 - skip = compiler->labelnum++; + skip = compiler.labelnum++; UML_TEST(block, MODE1, 0x40); UML_JMPc(block, (data & 0x40) ? COND_NZ : COND_Z, skip); // don't swap if the bits are same UML_CALLH(block, *m_swap_dag2_0_3); UML_LABEL(block, skip); // REG 8-15 - skip = compiler->labelnum++; + skip = compiler.labelnum++; UML_TEST(block, MODE1, 0x80); UML_JMPc(block, (data & 0x80) ? COND_NZ : COND_Z, skip); // don't swap if the bits are same UML_CALLH(block, *m_swap_r8_15); UML_LABEL(block, skip); // REG 0-7 - skip = compiler->labelnum++; + skip = compiler.labelnum++; UML_TEST(block, MODE1, 0x400); UML_JMPc(block, (data & 0x400) ? COND_NZ : COND_Z, skip); // don't swap if the bits are same UML_CALLH(block, *m_swap_r0_7); @@ -1312,7 +1308,7 @@ void adsp21062_device::generate_write_mode1_imm(drcuml_block *block, compiler_st UML_MOV(block, MODE1, data); } -void adsp21062_device::generate_set_mode1_imm(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, uint32_t data) +void adsp21062_device::generate_set_mode1_imm(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc, uint32_t data) { if (data & 0x1) fatalerror("generate_set_mode1_imm: tried to enable I8 bit reversing"); @@ -1322,7 +1318,7 @@ void adsp21062_device::generate_set_mode1_imm(drcuml_block *block, compiler_stat fatalerror("generate_set_mode1_imm: tried to enable MR alternate"); if (data & 0x8) // DAG1 regs 4-7 { - code_label skip = compiler->labelnum++; + uml::code_label const skip = compiler.labelnum++; UML_TEST(block, MODE1, 0x8); UML_JMPc(block, COND_NZ, skip); // don't swap if the bit is already 1 UML_CALLH(block, *m_swap_dag1_4_7); @@ -1330,7 +1326,7 @@ void adsp21062_device::generate_set_mode1_imm(drcuml_block *block, compiler_stat } if (data & 0x10) // DAG1 regs 0-3 { - code_label skip = compiler->labelnum++; + uml::code_label const skip = compiler.labelnum++; UML_TEST(block, MODE1, 0x10); UML_JMPc(block, COND_NZ, skip); // don't swap if the bit is already 1 UML_CALLH(block, *m_swap_dag1_0_3); @@ -1338,7 +1334,7 @@ void adsp21062_device::generate_set_mode1_imm(drcuml_block *block, compiler_stat } if (data & 0x20) // DAG2 regs 4-7 { - code_label skip = compiler->labelnum++; + uml::code_label const skip = compiler.labelnum++; UML_TEST(block, MODE1, 0x20); UML_JMPc(block, COND_NZ, skip); // don't swap if the bit is already 1 UML_CALLH(block, *m_swap_dag2_4_7); @@ -1346,7 +1342,7 @@ void adsp21062_device::generate_set_mode1_imm(drcuml_block *block, compiler_stat } if (data & 0x40) // DAG1 regs 0-3 { - code_label skip = compiler->labelnum++; + uml::code_label const skip = compiler.labelnum++; UML_TEST(block, MODE1, 0x40); UML_JMPc(block, COND_NZ, skip); // don't swap if the bit is already 1 UML_CALLH(block, *m_swap_dag2_0_3); @@ -1354,7 +1350,7 @@ void adsp21062_device::generate_set_mode1_imm(drcuml_block *block, compiler_stat } if (data & 0x80) // REG 8-15 { - code_label skip = compiler->labelnum++; + uml::code_label const skip = compiler.labelnum++; UML_TEST(block, MODE1, 0x80); UML_JMPc(block, COND_NZ, skip); // don't swap if the bit is already 1 UML_CALLH(block, *m_swap_r8_15); @@ -1362,7 +1358,7 @@ void adsp21062_device::generate_set_mode1_imm(drcuml_block *block, compiler_stat } if (data & 0x400) // REG 0-7 { - code_label skip = compiler->labelnum++; + uml::code_label const skip = compiler.labelnum++; UML_TEST(block, MODE1, 0x400); UML_JMPc(block, COND_NZ, skip); // don't swap if the bit is already 1 UML_CALLH(block, *m_swap_r0_7); @@ -1372,7 +1368,7 @@ void adsp21062_device::generate_set_mode1_imm(drcuml_block *block, compiler_stat UML_OR(block, MODE1, MODE1, data); } -void adsp21062_device::generate_clear_mode1_imm(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, uint32_t data) +void adsp21062_device::generate_clear_mode1_imm(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc, uint32_t data) { if (data & 0x1) fatalerror("generate_clear_mode1_imm: tried to disable I8 bit reversing"); @@ -1382,7 +1378,7 @@ void adsp21062_device::generate_clear_mode1_imm(drcuml_block *block, compiler_st fatalerror("generate_clear_mode1_imm: tried to disable MR alternate"); if (data & 0x8) // DAG1 regs 4-7 { - code_label skip = compiler->labelnum++; + uml::code_label const skip = compiler.labelnum++; UML_TEST(block, MODE1, 0x8); UML_JMPc(block, COND_Z, skip); // don't swap if the bit is already 0 UML_CALLH(block, *m_swap_dag1_4_7); @@ -1390,7 +1386,7 @@ void adsp21062_device::generate_clear_mode1_imm(drcuml_block *block, compiler_st } if (data & 0x10) // DAG1 regs 0-3 { - code_label skip = compiler->labelnum++; + uml::code_label const skip = compiler.labelnum++; UML_TEST(block, MODE1, 0x10); UML_JMPc(block, COND_Z, skip); // don't swap if the bit is already 0 UML_CALLH(block, *m_swap_dag1_0_3); @@ -1398,7 +1394,7 @@ void adsp21062_device::generate_clear_mode1_imm(drcuml_block *block, compiler_st } if (data & 0x20) // DAG2 regs 4-7 { - code_label skip = compiler->labelnum++; + uml::code_label const skip = compiler.labelnum++; UML_TEST(block, MODE1, 0x20); UML_JMPc(block, COND_Z, skip); // don't swap if the bit is already 0 UML_CALLH(block, *m_swap_dag2_4_7); @@ -1406,7 +1402,7 @@ void adsp21062_device::generate_clear_mode1_imm(drcuml_block *block, compiler_st } if (data & 0x40) // DAG1 regs 0-3 { - code_label skip = compiler->labelnum++; + uml::code_label const skip = compiler.labelnum++; UML_TEST(block, MODE1, 0x40); UML_JMPc(block, COND_Z, skip); // don't swap if the bit is already 0 UML_CALLH(block, *m_swap_dag2_0_3); @@ -1414,7 +1410,7 @@ void adsp21062_device::generate_clear_mode1_imm(drcuml_block *block, compiler_st } if (data & 0x80) // REG 8-15 { - code_label skip = compiler->labelnum++; + uml::code_label const skip = compiler.labelnum++; UML_TEST(block, MODE1, 0x80); UML_JMPc(block, COND_Z, skip); // don't swap if the bit is already 0 UML_CALLH(block, *m_swap_r8_15); @@ -1422,7 +1418,7 @@ void adsp21062_device::generate_clear_mode1_imm(drcuml_block *block, compiler_st } if (data & 0x400) // REG 0-7 { - code_label skip = compiler->labelnum++; + uml::code_label const skip = compiler.labelnum++; UML_TEST(block, MODE1, 0x400); UML_JMPc(block, COND_Z, skip); // don't swap if the bit is already 0 UML_CALLH(block, *m_swap_r0_7); @@ -1434,13 +1430,13 @@ void adsp21062_device::generate_clear_mode1_imm(drcuml_block *block, compiler_st -void adsp21062_device::generate_update_circular_buffer(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, int g, int i) +void adsp21062_device::generate_update_circular_buffer(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc, int g, int i) { if (g) { // PM - code_label end = compiler->labelnum++; - code_label label2 = compiler->labelnum++; + uml::code_label const end = compiler.labelnum++; + uml::code_label const label2 = compiler.labelnum++; UML_CMP(block, PM_L(i), 0); UML_JMPc(block, COND_E, end); @@ -1460,8 +1456,8 @@ void adsp21062_device::generate_update_circular_buffer(drcuml_block *block, comp else { // DM - code_label end = compiler->labelnum++; - code_label label2 = compiler->labelnum++; + uml::code_label const end = compiler.labelnum++; + uml::code_label const label2 = compiler.labelnum++; UML_CMP(block, DM_L(i), 0); UML_JMPc(block, COND_E, end); @@ -1480,7 +1476,7 @@ void adsp21062_device::generate_update_circular_buffer(drcuml_block *block, comp } } -void adsp21062_device::generate_astat_copy(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc) +void adsp21062_device::generate_astat_copy(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc) { UML_MOV(block, mem(&m_core->astat_drc_copy.az), ASTAT_AZ); UML_MOV(block, mem(&m_core->astat_drc_copy.av), ASTAT_AV); @@ -1502,11 +1498,11 @@ void adsp21062_device::generate_astat_copy(drcuml_block *block, compiler_state * -void adsp21062_device::generate_call(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, bool delayslot) +void adsp21062_device::generate_call(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc, bool delayslot) { // I0 = target pc for dynamic branches - compiler_state compiler_temp = *compiler; + compiler_state compiler_temp(compiler); // save branch target if (desc->targetpc == BRANCH_TARGET_DYNAMIC) @@ -1517,8 +1513,8 @@ void adsp21062_device::generate_call(drcuml_block *block, compiler_state *compil // compile delay slots if needed if (delayslot) { - generate_sequence_instruction(block, &compiler_temp, desc->delay.first(), false); - generate_sequence_instruction(block, &compiler_temp, desc->delay.last(), true); + generate_sequence_instruction(block, compiler_temp, desc->delay.first(), false); + generate_sequence_instruction(block, compiler_temp, desc->delay.last(), true); } // if this is the last instruction of a loop, we need to use the return PC from the resolved loop @@ -1538,7 +1534,7 @@ void adsp21062_device::generate_call(drcuml_block *block, compiler_state *compil // update cycles and hash jump if (desc->targetpc != BRANCH_TARGET_DYNAMIC) { - generate_update_cycles(block, &compiler_temp, desc->targetpc, true); + generate_update_cycles(block, compiler_temp, desc->targetpc, true); if (desc->flags & OPFLAG_INTRABLOCK_BRANCH) UML_JMP(block, desc->targetpc | 0x80000000); // jmp targetpc | 0x80000000 else @@ -1546,23 +1542,23 @@ void adsp21062_device::generate_call(drcuml_block *block, compiler_state *compil } else { - generate_update_cycles(block, &compiler_temp, mem(&m_core->jmpdest), true); + generate_update_cycles(block, compiler_temp, uml::mem(&m_core->jmpdest), true); UML_HASHJMP(block, 0, mem(&m_core->jmpdest), *m_nocode); // hashjmp 0,jmpdest,nocode } // update compiler label - compiler->labelnum = compiler_temp.labelnum; + compiler.labelnum = compiler_temp.labelnum; /* reset the mapvar to the current cycles and account for skipped slots */ - compiler->cycles += desc->skipslots; - UML_MAPVAR(block, MAPVAR_CYCLES, compiler->cycles); // mapvar CYCLES,compiler->cycles + compiler.cycles += desc->skipslots; + UML_MAPVAR(block, MAPVAR_CYCLES, compiler.cycles); // mapvar CYCLES,compiler.cycles } -void adsp21062_device::generate_jump(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, bool delayslot, bool loopabort, bool clearint) +void adsp21062_device::generate_jump(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc, bool delayslot, bool loopabort, bool clearint) { // I0 = target pc for dynamic branches - compiler_state compiler_temp = *compiler; + compiler_state compiler_temp(compiler); // save branch target if (desc->targetpc == BRANCH_TARGET_DYNAMIC) @@ -1573,14 +1569,14 @@ void adsp21062_device::generate_jump(drcuml_block *block, compiler_state *compil // compile delay slots if needed if (delayslot) { - generate_sequence_instruction(block, &compiler_temp, desc->delay.first(), false); - generate_sequence_instruction(block, &compiler_temp, desc->delay.last(), true); + generate_sequence_instruction(block, compiler_temp, desc->delay.first(), false); + generate_sequence_instruction(block, compiler_temp, desc->delay.last(), true); } // clear interrupt if (clearint) { - code_label skip_pop = compiler_temp.labelnum++; + uml::code_label const skip_pop = compiler_temp.labelnum++; UML_MOV(block, mem(&m_core->interrupt_active), 0); // mov [interrupt_active],0 UML_SHL(block, I1, 1, mem(&m_core->active_irq_num)); // shl i1,1,[active_irq_num] @@ -1601,7 +1597,7 @@ void adsp21062_device::generate_jump(drcuml_block *block, compiler_state *compil // update cycles and hash jump if (desc->targetpc != BRANCH_TARGET_DYNAMIC) { - generate_update_cycles(block, &compiler_temp, desc->targetpc, true); + generate_update_cycles(block, compiler_temp, desc->targetpc, true); if (desc->flags & OPFLAG_INTRABLOCK_BRANCH) UML_JMP(block, desc->targetpc | 0x80000000); // jmp targetpc | 0x80000000 else @@ -1609,19 +1605,19 @@ void adsp21062_device::generate_jump(drcuml_block *block, compiler_state *compil } else { - generate_update_cycles(block, &compiler_temp, mem(&m_core->jmpdest), true); + generate_update_cycles(block, compiler_temp, uml::mem(&m_core->jmpdest), true); UML_HASHJMP(block, 0, mem(&m_core->jmpdest), *m_nocode); // hashjmp 0,jmpdest,nocode } // update compiler label - compiler->labelnum = compiler_temp.labelnum; + compiler.labelnum = compiler_temp.labelnum; /* reset the mapvar to the current cycles and account for skipped slots */ - compiler->cycles += desc->skipslots; - UML_MAPVAR(block, MAPVAR_CYCLES, compiler->cycles); // mapvar CYCLES,compiler->cycles + compiler.cycles += desc->skipslots; + UML_MAPVAR(block, MAPVAR_CYCLES, compiler.cycles); // mapvar CYCLES,compiler.cycles } -void adsp21062_device::generate_loop_jump(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc) +void adsp21062_device::generate_loop_jump(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc) { // update cycles and hash jump generate_update_cycles(block, compiler, desc->userdata0, true); @@ -1634,15 +1630,15 @@ void adsp21062_device::generate_loop_jump(drcuml_block *block, compiler_state *c UML_HASHJMP(block, 0, desc->userdata0, *m_nocode); /* reset the mapvar to the current cycles and account for skipped slots */ - compiler->cycles += desc->skipslots; - UML_MAPVAR(block, MAPVAR_CYCLES, compiler->cycles); // mapvar CYCLES,compiler->cycles + compiler.cycles += desc->skipslots; + UML_MAPVAR(block, MAPVAR_CYCLES, compiler.cycles); // mapvar CYCLES,compiler.cycles } /*------------------------------------------------- generate_write_ureg - UREG is read into I0 -------------------------------------------------*/ -void adsp21062_device::generate_read_ureg(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, int ureg, bool has_compute) +void adsp21062_device::generate_read_ureg(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc, int ureg, bool has_compute) { // UREG is read into I0 @@ -1825,7 +1821,7 @@ void adsp21062_device::generate_read_ureg(drcuml_block *block, compiler_state *c generate_write_ureg - contents of register I0 or 32-bit immediate data are written into UREG -------------------------------------------------*/ -void adsp21062_device::generate_write_ureg(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, int ureg, bool imm, uint32_t data) +void adsp21062_device::generate_write_ureg(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc, int ureg, bool imm, uint32_t data) { switch (ureg) { @@ -1899,14 +1895,14 @@ void adsp21062_device::generate_write_ureg(drcuml_block *block, compiler_state * // MODE1 needs to be written delayed if (imm) { - compiler->mode1_delay.counter = 2; - compiler->mode1_delay.data = data; - compiler->mode1_delay.mode = MODE1_WRITE_IMM; + compiler.mode1_delay.counter = 2; + compiler.mode1_delay.data = data; + compiler.mode1_delay.mode = MODE1_WRITE_IMM; } else { - compiler->mode1_delay.counter = 2; - compiler->mode1_delay.mode = MODE1_WRITE_REG; + compiler.mode1_delay.counter = 2; + compiler.mode1_delay.mode = MODE1_WRITE_REG; UML_MOV(block, mem(&m_core->mode1_delay_data), I0); } break; @@ -1964,7 +1960,7 @@ void adsp21062_device::generate_write_ureg(drcuml_block *block, compiler_state * } } -bool adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc) +bool adsp21062_device::generate_opcode(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc) { uint64_t opcode = desc->opptr.q[0]; @@ -1999,7 +1995,7 @@ bool adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *comp if (has_condition) { - skip_label = compiler->labelnum++; + skip_label = compiler.labelnum++; generate_if_condition(block, compiler, desc, cond, skip_label); } @@ -2023,7 +2019,7 @@ bool adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *comp if (has_condition) { - skip_label = compiler->labelnum++; + skip_label = compiler.labelnum++; generate_if_condition(block, compiler, desc, cond, skip_label); } @@ -2046,7 +2042,7 @@ bool adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *comp if (has_condition) { - skip_label = compiler->labelnum++; + skip_label = compiler.labelnum++; generate_if_condition(block, compiler, desc, cond, skip_label); } @@ -2084,7 +2080,7 @@ bool adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *comp if (has_condition) { - skip_label = compiler->labelnum++; + skip_label = compiler.labelnum++; generate_if_condition(block, compiler, desc, cond, skip_label); } if (b) // call @@ -2113,7 +2109,7 @@ bool adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *comp if (has_condition) { - skip_label = compiler->labelnum++; + skip_label = compiler.labelnum++; generate_if_condition(block, compiler, desc, cond, skip_label); } if (b) // call @@ -2144,7 +2140,7 @@ bool adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *comp { // IF ... ELSE - int label_else = compiler->labelnum++; + int label_else = compiler.labelnum++; generate_if_condition(block, compiler, desc, cond, label_else); UML_ADD(block, I0, PM_I(pmi), PM_M(pmm)); @@ -2169,7 +2165,7 @@ bool adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *comp if (has_condition) { - skip_label = compiler->labelnum++; + skip_label = compiler.labelnum++; generate_if_condition(block, compiler, desc, cond, skip_label); } generate_compute(block, compiler, desc); @@ -2205,7 +2201,7 @@ bool adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *comp { // IF ... ELSE - int label_else = compiler->labelnum++; + int label_else = compiler.labelnum++; generate_if_condition(block, compiler, desc, cond, label_else); if (b) // call @@ -2228,7 +2224,7 @@ bool adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *comp if (has_condition) { - skip_label = compiler->labelnum++; + skip_label = compiler.labelnum++; generate_if_condition(block, compiler, desc, cond, skip_label); } generate_compute(block, compiler, desc); @@ -2262,7 +2258,7 @@ bool adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *comp { // IF ... ELSE - int label_else = compiler->labelnum++; + int label_else = compiler.labelnum++; generate_if_condition(block, compiler, desc, cond, label_else); UML_CALLH(block, *m_pop_pc); @@ -2279,7 +2275,7 @@ bool adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *comp if (has_condition) { - skip_label = compiler->labelnum++; + skip_label = compiler.labelnum++; generate_if_condition(block, compiler, desc, cond, skip_label); } generate_compute(block, compiler, desc); @@ -2301,7 +2297,7 @@ bool adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *comp int e = (opcode >> 25) & 0x1; - code_label skip_pop = compiler->labelnum++; + uml::code_label const skip_pop = compiler.labelnum++; UML_MOV(block, mem(&m_core->interrupt_active), 0); // mov [interrupt_active],0 UML_MOV(block, I0, 1); // mov i0,1 @@ -2319,7 +2315,7 @@ bool adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *comp { // IF ... ELSE - code_label label_else = compiler->labelnum++; + uml::code_label const label_else = compiler.labelnum++; generate_if_condition(block, compiler, desc, cond, label_else); UML_CALLH(block, *m_pop_pc); @@ -2332,11 +2328,11 @@ bool adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *comp { // IF bool has_condition = !if_condition_always_true(cond); - code_label skip_label = 0; + uml::code_label skip_label = 0; if (has_condition) { - skip_label = compiler->labelnum++; + skip_label = compiler.labelnum++; generate_if_condition(block, compiler, desc, cond, skip_label); } generate_compute(block, compiler, desc); @@ -2496,9 +2492,9 @@ bool adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *comp UML_OR(block, MODE2, MODE2, data); break; case 0xb: // MODE1 - compiler->mode1_delay.counter = 2; - compiler->mode1_delay.data = data; - compiler->mode1_delay.mode = MODE1_SET; + compiler.mode1_delay.counter = 2; + compiler.mode1_delay.data = data; + compiler.mode1_delay.mode = MODE1_SET; break; case 0xc: // ASTAT // TODO: does this need delay? @@ -2577,9 +2573,9 @@ bool adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *comp UML_AND(block, MODE2, MODE2, ~data); break; case 0xb: // MODE1 - compiler->mode1_delay.counter = 2; - compiler->mode1_delay.data = data; - compiler->mode1_delay.mode = MODE1_CLEAR; + compiler.mode1_delay.counter = 2; + compiler.mode1_delay.data = data; + compiler.mode1_delay.mode = MODE1_CLEAR; break; case 0xc: // ASTAT // TODO: does this need delay? @@ -2658,9 +2654,9 @@ bool adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *comp UML_XOR(block, MODE2, MODE2, data); break; case 0xb: // MODE1 - compiler->mode1_delay.counter = 2; - compiler->mode1_delay.data = data; - compiler->mode1_delay.mode = MODE1_TOGGLE; + compiler.mode1_delay.counter = 2; + compiler.mode1_delay.data = data; + compiler.mode1_delay.mode = MODE1_TOGGLE; break; case 0xc: // ASTAT return false; @@ -2905,7 +2901,7 @@ bool adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *comp if (has_condition) { - skip_label = compiler->labelnum++; + skip_label = compiler.labelnum++; generate_if_condition(block, compiler, desc, cond, skip_label); } @@ -2994,7 +2990,7 @@ bool adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *comp if (has_condition) { - skip_label = compiler->labelnum++; + skip_label = compiler.labelnum++; generate_if_condition(block, compiler, desc, cond, skip_label); } @@ -3043,7 +3039,7 @@ bool adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *comp if (has_condition) { - skip_label = compiler->labelnum++; + skip_label = compiler.labelnum++; generate_if_condition(block, compiler, desc, cond, skip_label); } if (d) @@ -3150,7 +3146,7 @@ bool adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *comp if (has_condition) { - skip_label = compiler->labelnum++; + skip_label = compiler.labelnum++; generate_if_condition(block, compiler, desc, cond, skip_label); } if (d) @@ -3249,7 +3245,7 @@ bool adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *comp int cond = (opcode >> 33) & 0x1f; int dreg = (opcode >> 23) & 0xf; - code_label label_else = compiler->labelnum++; + uml::code_label const label_else = compiler.labelnum++; generate_if_condition(block, compiler, desc, cond, label_else); UML_ADD(block, I0, PM_I(pmi), PM_M(pmm)); @@ -3308,7 +3304,7 @@ bool adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *comp int cond = (opcode >> 33) & 0x1f; int dreg = (opcode >> 23) & 0xf; - code_label label_else = compiler->labelnum++; + uml::code_label const label_else = compiler.labelnum++; generate_if_condition(block, compiler, desc, cond, label_else); generate_jump(block, compiler, desc, false, false, false); @@ -3362,14 +3358,14 @@ bool adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *comp return false; } -void adsp21062_device::generate_unimplemented_compute(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc) +void adsp21062_device::generate_unimplemented_compute(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc) { UML_MOV(block, mem(&m_core->pc), desc->pc); UML_DMOV(block, mem(&m_core->arg64), desc->opptr.q[0]); UML_CALLC(block, cfunc_unimplemented_compute, this); } -void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc) +void adsp21062_device::generate_compute(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc) { uint64_t opcode = desc->opptr.q[0]; if ((opcode & 0x7fffff) == 0) @@ -3597,8 +3593,8 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com case 0x1a: // Fm = F3-0 * F7-4, Fa = FLOAT F11-8 BY R15-12 { - code_label denormal = compiler->labelnum++; - code_label end = compiler->labelnum++; + uml::code_label const denormal = compiler.labelnum++; + uml::code_label const end = compiler.labelnum++; // TODO: denormals UML_FSCOPYI(block, F0, REG(fxm)); @@ -3650,8 +3646,8 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com case 0x1b: // Fm = F3-0 * F7-4, Fa = FIX F11-8 BY R15-12 { - code_label denormal = compiler->labelnum++; - code_label end = compiler->labelnum++; + uml::code_label const denormal = compiler.labelnum++; + uml::code_label const end = compiler.labelnum++; // TODO: denormals UML_FSCOPYI(block, F0, REG(fxm)); @@ -3692,12 +3688,12 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com UML_FSCOPYI(block, F2, I0); UML_TEST(block, MODE1, MODE1_TRUNCATE); - UML_JMPc(block, COND_Z, compiler->labelnum); + UML_JMPc(block, COND_Z, compiler.labelnum); UML_FSTOINT(block, I0, F2, SIZE_DWORD, ROUND_TRUNC); - UML_JMP(block, compiler->labelnum + 1); - UML_LABEL(block, compiler->labelnum++); + UML_JMP(block, compiler.labelnum + 1); + UML_LABEL(block, compiler.labelnum++); UML_FSTOINT(block, I0, F2, SIZE_DWORD, ROUND_ROUND); - UML_LABEL(block, compiler->labelnum++); + UML_LABEL(block, compiler.labelnum++); if (MN_CALC_REQUIRED) UML_FSCMP(block, F0, mem(&m_core->fp0)); @@ -4146,9 +4142,9 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com if (AN_CALC_REQUIRED) UML_SETc(block, COND_C, ASTAT_AN); if (AV_CALC_REQUIRED) UML_SETc(block, COND_Z, ASTAT_AV); UML_FSCMP(block, F0, mem(&m_core->fp0)); - UML_JMPc(block, COND_Z, compiler->labelnum); + UML_JMPc(block, COND_Z, compiler.labelnum); UML_FSRECIP(block, F0, F0); - UML_LABEL(block, compiler->labelnum++); + UML_LABEL(block, compiler.labelnum++); if (AZ_CALC_REQUIRED) UML_FSCMP(block, F0, mem(&m_core->fp0)); if (AZ_CALC_REQUIRED) UML_SETc(block, COND_Z, ASTAT_AZ); @@ -4163,9 +4159,9 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com // TODO: use the bit accurate method from interpreter? UML_FSCOPYI(block, F0, REG(rx)); UML_FSCMP(block, F0, mem(&m_core->fp0)); - UML_JMPc(block, COND_Z, compiler->labelnum); + UML_JMPc(block, COND_Z, compiler.labelnum); UML_FSRSQRT(block, F0, F0); - UML_LABEL(block, compiler->labelnum++); + UML_LABEL(block, compiler.labelnum++); UML_ICOPYFS(block, REG(rn), F0); // TODO: flags! if (AC_CALC_REQUIRED) UML_MOV(block, ASTAT_AC, 0); @@ -4187,12 +4183,12 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com case 0xc9: // Rn = FIX Fx UML_FSCOPYI(block, F0, REG(rx)); UML_TEST(block, MODE1, MODE1_TRUNCATE); - UML_JMPc(block, COND_Z, compiler->labelnum); + UML_JMPc(block, COND_Z, compiler.labelnum); UML_FSTOINT(block, I0, F0, SIZE_DWORD, ROUND_TRUNC); - UML_JMP(block, compiler->labelnum + 1); - UML_LABEL(block, compiler->labelnum++); + UML_JMP(block, compiler.labelnum + 1); + UML_LABEL(block, compiler.labelnum++); UML_FSTOINT(block, I0, F0, SIZE_DWORD, ROUND_ROUND); - UML_LABEL(block, compiler->labelnum++); + UML_LABEL(block, compiler.labelnum++); if (AZ_CALC_REQUIRED || AN_CALC_REQUIRED) UML_CMP(block, I0, 0); @@ -4207,8 +4203,8 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com case 0xd9: // Rn = FIX Fx BY Ry { - code_label denormal = compiler->labelnum++; - code_label end = compiler->labelnum++; + uml::code_label const denormal = compiler.labelnum++; + uml::code_label const end = compiler.labelnum++; UML_MOV(block, I1, REG(rx)); UML_AND(block, I0, I1, 0x7f800000); @@ -4226,12 +4222,12 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com UML_FSCOPYI(block, F2, I0); UML_TEST(block, MODE1, MODE1_TRUNCATE); - UML_JMPc(block, COND_Z, compiler->labelnum); + UML_JMPc(block, COND_Z, compiler.labelnum); UML_FSTOINT(block, I0, F2, SIZE_DWORD, ROUND_TRUNC); - UML_JMP(block, compiler->labelnum + 1); - UML_LABEL(block, compiler->labelnum++); + UML_JMP(block, compiler.labelnum + 1); + UML_LABEL(block, compiler.labelnum++); UML_FSTOINT(block, I0, F2, SIZE_DWORD, ROUND_ROUND); - UML_LABEL(block, compiler->labelnum++); + UML_LABEL(block, compiler.labelnum++); if (AZ_CALC_REQUIRED || AN_CALC_REQUIRED) UML_CMP(block, I0, 0); @@ -4260,8 +4256,8 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com case 0xda: // Fn = FLOAT Rx BY Ry { - code_label denormal = compiler->labelnum++; - code_label end = compiler->labelnum++; + uml::code_label const denormal = compiler.labelnum++; + uml::code_label const end = compiler.labelnum++; UML_FSFRINT(block, F0, REG(rx), SIZE_DWORD); UML_ICOPYFS(block, I1, F0); UML_AND(block, I0, I1, 0x7f800000); @@ -4336,8 +4332,8 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com case 0xe3: // Fn = CLIP Fx BY Fy { - code_label label_1 = compiler->labelnum++; - code_label label_2 = compiler->labelnum++; + uml::code_label const label_1 = compiler.labelnum++; + uml::code_label const label_2 = compiler.labelnum++; UML_FSCOPYI(block, F0, REG(rx)); UML_FSCOPYI(block, F1, REG(ry)); UML_FSABS(block, F1, F1); @@ -4641,8 +4637,8 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com case 0x00: // Rn = LSHIFT Rx BY Ry | <data8> { - code_label shift_neg = compiler->labelnum++; - code_label shift_end = compiler->labelnum++; + uml::code_label const shift_neg = compiler.labelnum++; + uml::code_label const shift_end = compiler.labelnum++; UML_MOV(block, I0, REG(ry)); UML_CMP(block, I0, 0); @@ -4666,8 +4662,8 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com case 0x08: // Rn = ROT Rx BY Ry | <data8> { - code_label shift_neg = compiler->labelnum++; - code_label shift_end = compiler->labelnum++; + uml::code_label const shift_neg = compiler.labelnum++; + uml::code_label const shift_end = compiler.labelnum++; UML_MOV(block, I0, REG(ry)); UML_CMP(block, I0, 0); @@ -4687,8 +4683,8 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com case 0x20: // Rn = Rn OR LSHIFT Rx BY Ry | <data8> { - code_label shift_neg = compiler->labelnum++; - code_label shift_end = compiler->labelnum++; + uml::code_label const shift_neg = compiler.labelnum++; + uml::code_label const shift_end = compiler.labelnum++; UML_MOV(block, I0, REG(ry)); UML_CMP(block, I0, 0); @@ -4844,10 +4840,10 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com } } -void adsp21062_device::generate_if_condition(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, int condition, int skip_label) +void adsp21062_device::generate_if_condition(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc, int condition, int skip_label) { // Jump to skip_label if condition is not true - code_label not_skip; + uml::code_label not_skip; switch (condition) { @@ -4862,7 +4858,7 @@ void adsp21062_device::generate_if_condition(drcuml_block *block, compiler_state UML_JMPc(block, COND_E, skip_label); break; case 0x02: /* LE */ - not_skip = compiler->labelnum++; + not_skip = compiler.labelnum++; UML_TEST(block, ASTAT_AZ, 1); UML_JMPc(block, COND_NZ, not_skip); UML_TEST(block, ASTAT_AN, 1); @@ -4926,7 +4922,7 @@ void adsp21062_device::generate_if_condition(drcuml_block *block, compiler_state UML_JMPc(block, COND_NE, skip_label); break; case 0x11: /* GE */ - not_skip = compiler->labelnum++; + not_skip = compiler.labelnum++; UML_TEST(block, ASTAT_AZ, 1); UML_JMPc(block, COND_NZ, not_skip); UML_TEST(block, ASTAT_AN, 1); @@ -4993,10 +4989,10 @@ void adsp21062_device::generate_if_condition(drcuml_block *block, compiler_state } } -void adsp21062_device::generate_do_condition(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, int condition, int skip_label, ASTAT_DRC &astat) +void adsp21062_device::generate_do_condition(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc, int condition, int skip_label, ASTAT_DRC &astat) { // Jump to skip_label if condition is true - code_label not_skip; + uml::code_label not_skip; switch (condition) { @@ -5005,7 +5001,7 @@ void adsp21062_device::generate_do_condition(drcuml_block *block, compiler_state UML_JMPc(block, COND_NZ, skip_label); break; case 0x01: /* LT */ - not_skip = compiler->labelnum++; + not_skip = compiler.labelnum++; UML_TEST(block, mem(&m_core->astat_delay_copy.az), 1); UML_JMPc(block, COND_NZ, not_skip); UML_TEST(block, mem(&m_core->astat_delay_copy.an), 1); @@ -5080,7 +5076,7 @@ void adsp21062_device::generate_do_condition(drcuml_block *block, compiler_state UML_JMPc(block, COND_Z, skip_label); break; case 0x12: /* GT */ - not_skip = compiler->labelnum++; + not_skip = compiler.labelnum++; UML_TEST(block, mem(&m_core->astat_delay_copy.az), 1); UML_JMPc(block, COND_NZ, not_skip); UML_TEST(block, mem(&m_core->astat_delay_copy.an), 1); @@ -5142,7 +5138,7 @@ void adsp21062_device::generate_do_condition(drcuml_block *block, compiler_state } } -void adsp21062_device::generate_shift_imm(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, int data, int shiftop, int rn, int rx) +void adsp21062_device::generate_shift_imm(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc, int data, int shiftop, int rn, int rx) { int8_t shift = data & 0xff; int bit = data & 0x3f; |