diff options
-rwxr-xr-x | configure | 34 | ||||
-rw-r--r-- | disas/lm32.c | 8 | ||||
-rw-r--r-- | hw/lm32/Makefile.objs | 2 | ||||
-rw-r--r-- | hw/lm32_uart.c | 1 | ||||
-rw-r--r-- | hw/milkymist-hw.h | 4 | ||||
-rw-r--r-- | hw/milkymist-uart.c | 1 | ||||
-rw-r--r-- | target-lm32/cpu.c | 4 | ||||
-rw-r--r-- | target-lm32/cpu.h | 10 | ||||
-rw-r--r-- | target-lm32/helper.c | 7 | ||||
-rw-r--r-- | target-lm32/op_helper.c | 20 | ||||
-rw-r--r-- | target-lm32/translate.c | 23 | ||||
-rw-r--r-- | tests/tcg/lm32/test_cmpgei.S | 15 | ||||
-rw-r--r-- | tests/tcg/lm32/test_cmpgeui.S | 15 | ||||
-rw-r--r-- | tests/tcg/lm32/test_cmpgi.S | 15 | ||||
-rw-r--r-- | tests/tcg/lm32/test_cmpgui.S | 17 |
15 files changed, 119 insertions, 57 deletions
@@ -217,7 +217,7 @@ spice="" rbd="" smartcard_nss="" usb_redir="" -opengl="" +glx="" zlib="yes" guest_agent="yes" want_tools="yes" @@ -858,9 +858,9 @@ for opt do ;; --enable-vhost-net) vhost_net="yes" ;; - --disable-opengl) opengl="no" + --disable-glx) glx="no" ;; - --enable-opengl) opengl="yes" + --enable-glx) glx="yes" ;; --disable-rbd) rbd="no" ;; @@ -2436,23 +2436,23 @@ EOF fi ########################################## -# opengl probe, used by milkymist-tmu2 -if test "$opengl" != "no" ; then - opengl_libs="-lGL -lX11" +# GLX probe, used by milkymist-tmu2 +if test "$glx" != "no" ; then + glx_libs="-lGL -lX11" cat > $TMPC << EOF #include <X11/Xlib.h> #include <GL/gl.h> #include <GL/glx.h> -int main(void) { return GL_VERSION != 0; } +int main(void) { glBegin(0); glXQueryVersion(0,0,0); return 0; } EOF - if compile_prog "" "-lGL" ; then - opengl=yes + if compile_prog "" "-lGL -lX11" ; then + glx=yes else - if test "$opengl" = "yes" ; then - feature_not_found "opengl" + if test "$glx" = "yes" ; then + feature_not_found "glx" fi - opengl_libs= - opengl=no + glx_libs= + glx=no fi fi @@ -3430,7 +3430,7 @@ echo "rbd support $rbd" echo "xfsctl support $xfs" echo "nss used $smartcard_nss" echo "usb net redir $usb_redir" -echo "OpenGL support $opengl" +echo "GLX support $glx" echo "libiscsi support $libiscsi" echo "build guest agent $guest_agent" echo "seccomp support $seccomp" @@ -3741,8 +3741,8 @@ if test "$usb_redir" = "yes" ; then echo "CONFIG_USB_REDIR=y" >> $config_host_mak fi -if test "$opengl" = "yes" ; then - echo "CONFIG_OPENGL=y" >> $config_host_mak +if test "$glx" = "yes" ; then + echo "CONFIG_GLX=y" >> $config_host_mak fi if test "$libiscsi" = "yes" ; then @@ -4020,7 +4020,7 @@ case "$target_arch2" in target_nptl="yes" ;; lm32) - target_libs_softmmu="$opengl_libs" + target_libs_softmmu="$glx_libs" ;; m68k) bflt="yes" diff --git a/disas/lm32.c b/disas/lm32.c index a8eefe05b1..1718c86e1c 100644 --- a/disas/lm32.c +++ b/disas/lm32.c @@ -303,11 +303,11 @@ int print_insn_lm32(bfd_vma memaddr, struct disassemble_info *info) } case 'c': { uint8_t csr; - const char *csr_name; + const Lm32CsrInfo *info; csr = (op >> 21) & 0x1f; - csr_name = find_csr_info(csr)->name; - if (csr_name) { - fprintf_fn(stream, "%s", csr_name); + info = find_csr_info(csr); + if (info) { + fprintf_fn(stream, "%s", info->name); } else { fprintf_fn(stream, "0x%x", csr); } diff --git a/hw/lm32/Makefile.objs b/hw/lm32/Makefile.objs index 4592fe5fc8..68ca90a3e2 100644 --- a/hw/lm32/Makefile.objs +++ b/hw/lm32/Makefile.objs @@ -11,7 +11,7 @@ obj-y += milkymist-minimac2.o obj-y += milkymist-pfpu.o obj-y += milkymist-softusb.o obj-y += milkymist-sysctl.o -obj-$(CONFIG_OPENGL) += milkymist-tmu2.o +obj-$(CONFIG_GLX) += milkymist-tmu2.o obj-y += milkymist-uart.o obj-y += milkymist-vgafb.o obj-y += framebuffer.o diff --git a/hw/lm32_uart.c b/hw/lm32_uart.c index 02f6f89174..32bc37ac96 100644 --- a/hw/lm32_uart.c +++ b/hw/lm32_uart.c @@ -137,6 +137,7 @@ static uint64_t uart_read(void *opaque, hwaddr addr, r = s->regs[R_RXTX]; s->regs[R_LSR] &= ~LSR_DR; uart_update_irq(s); + qemu_chr_accept_input(s->chr); break; case R_IIR: case R_LSR: diff --git a/hw/milkymist-hw.h b/hw/milkymist-hw.h index ced1c5f54e..c047a70a9f 100644 --- a/hw/milkymist-hw.h +++ b/hw/milkymist-hw.h @@ -87,7 +87,7 @@ static inline DeviceState *milkymist_pfpu_create(hwaddr base, return dev; } -#ifdef CONFIG_OPENGL +#ifdef CONFIG_GLX #include <X11/Xlib.h> #include <GL/glx.h> static const int glx_fbconfig_attr[] = { @@ -101,7 +101,7 @@ static const int glx_fbconfig_attr[] = { static inline DeviceState *milkymist_tmu2_create(hwaddr base, qemu_irq irq) { -#ifdef CONFIG_OPENGL +#ifdef CONFIG_GLX DeviceState *dev; Display *d; GLXFBConfig *configs; diff --git a/hw/milkymist-uart.c b/hw/milkymist-uart.c index ac6f5373ad..f3bdf6991a 100644 --- a/hw/milkymist-uart.c +++ b/hw/milkymist-uart.c @@ -132,6 +132,7 @@ static void uart_write(void *opaque, hwaddr addr, uint64_t value, case R_STAT: /* write one to clear bits */ s->regs[addr] &= ~(value & (STAT_RX_EVT | STAT_TX_EVT)); + qemu_chr_accept_input(s->chr); break; default: diff --git a/target-lm32/cpu.c b/target-lm32/cpu.c index bbb7fbf768..23c05ddbed 100644 --- a/target-lm32/cpu.c +++ b/target-lm32/cpu.c @@ -36,10 +36,10 @@ static void lm32_cpu_reset(CPUState *s) lcc->parent_reset(s); - tlb_flush(env, 1); - /* reset cpu state */ memset(env, 0, offsetof(CPULM32State, breakpoints)); + + tlb_flush(env, 1); } static void lm32_cpu_realizefn(DeviceState *dev, Error **errp) diff --git a/target-lm32/cpu.h b/target-lm32/cpu.h index fd50b534fc..bfb9150588 100644 --- a/target-lm32/cpu.h +++ b/target-lm32/cpu.h @@ -229,18 +229,8 @@ static inline void cpu_set_tls(CPULM32State *env, target_ulong newtls) { } -static inline int cpu_interrupts_enabled(CPULM32State *env) -{ - return env->ie & IE_IE; -} - #include "exec/cpu-all.h" -static inline target_ulong cpu_get_pc(CPULM32State *env) -{ - return env->pc; -} - static inline void cpu_get_tb_cpu_state(CPULM32State *env, target_ulong *pc, target_ulong *cs_base, int *flags) { diff --git a/target-lm32/helper.c b/target-lm32/helper.c index a0a8399906..03fa5fbe28 100644 --- a/target-lm32/helper.c +++ b/target-lm32/helper.c @@ -39,7 +39,12 @@ int cpu_lm32_handle_mmu_fault(CPULM32State *env, target_ulong address, int rw, hwaddr cpu_get_phys_page_debug(CPULM32State *env, target_ulong addr) { - return addr & TARGET_PAGE_MASK; + addr &= TARGET_PAGE_MASK; + if (env->flags & LM32_FLAG_IGNORE_MSB) { + return addr & 0x7fffffff; + } else { + return addr; + } } void lm32_cpu_do_interrupt(CPUState *cs) diff --git a/target-lm32/op_helper.c b/target-lm32/op_helper.c index ebc94a0681..7ff991e28e 100644 --- a/target-lm32/op_helper.c +++ b/target-lm32/op_helper.c @@ -17,13 +17,13 @@ #define SHIFT 3 #include "exec/softmmu_template.h" -void helper_raise_exception(CPULM32State *env, uint32_t index) +void HELPER(raise_exception)(CPULM32State *env, uint32_t index) { env->exception_index = index; cpu_loop_exit(env); } -void helper_hlt(CPULM32State *env) +void HELPER(hlt)(CPULM32State *env) { CPUState *cs = CPU(lm32_env_get_cpu(env)); @@ -32,42 +32,42 @@ void helper_hlt(CPULM32State *env) cpu_loop_exit(env); } -void helper_wcsr_im(CPULM32State *env, uint32_t im) +void HELPER(wcsr_im)(CPULM32State *env, uint32_t im) { lm32_pic_set_im(env->pic_state, im); } -void helper_wcsr_ip(CPULM32State *env, uint32_t im) +void HELPER(wcsr_ip)(CPULM32State *env, uint32_t im) { lm32_pic_set_ip(env->pic_state, im); } -void helper_wcsr_jtx(CPULM32State *env, uint32_t jtx) +void HELPER(wcsr_jtx)(CPULM32State *env, uint32_t jtx) { lm32_juart_set_jtx(env->juart_state, jtx); } -void helper_wcsr_jrx(CPULM32State *env, uint32_t jrx) +void HELPER(wcsr_jrx)(CPULM32State *env, uint32_t jrx) { lm32_juart_set_jrx(env->juart_state, jrx); } -uint32_t helper_rcsr_im(CPULM32State *env) +uint32_t HELPER(rcsr_im)(CPULM32State *env) { return lm32_pic_get_im(env->pic_state); } -uint32_t helper_rcsr_ip(CPULM32State *env) +uint32_t HELPER(rcsr_ip)(CPULM32State *env) { return lm32_pic_get_ip(env->pic_state); } -uint32_t helper_rcsr_jtx(CPULM32State *env) +uint32_t HELPER(rcsr_jtx)(CPULM32State *env) { return lm32_juart_get_jtx(env->juart_state); } -uint32_t helper_rcsr_jrx(CPULM32State *env) +uint32_t HELPER(rcsr_jrx)(CPULM32State *env) { return lm32_juart_get_jrx(env->juart_state); } diff --git a/target-lm32/translate.c b/target-lm32/translate.c index 695d9c59b2..e885bb3aeb 100644 --- a/target-lm32/translate.c +++ b/target-lm32/translate.c @@ -324,10 +324,20 @@ static inline void gen_compare(DisasContext *dc, int cond) int rX = (dc->format == OP_FMT_RR) ? dc->r2 : dc->r1; int rY = (dc->format == OP_FMT_RR) ? dc->r0 : dc->r0; int rZ = (dc->format == OP_FMT_RR) ? dc->r1 : -1; + int i; if (dc->format == OP_FMT_RI) { - tcg_gen_setcondi_tl(cond, cpu_R[rX], cpu_R[rY], - sign_extend(dc->imm16, 16)); + switch (cond) { + case TCG_COND_GEU: + case TCG_COND_GTU: + i = zero_extend(dc->imm16, 16); + break; + default: + i = sign_extend(dc->imm16, 16); + break; + } + + tcg_gen_setcondi_tl(cond, cpu_R[rX], cpu_R[rY], i); } else { tcg_gen_setcond_tl(cond, cpu_R[rX], cpu_R[rY], cpu_R[rZ]); } @@ -373,7 +383,7 @@ static void dec_cmpgeu(DisasContext *dc) { if (dc->format == OP_FMT_RI) { LOG_DIS("cmpgeui r%d, r%d, %d\n", dc->r0, dc->r1, - sign_extend(dc->imm16, 16)); + zero_extend(dc->imm16, 16)); } else { LOG_DIS("cmpgeu r%d, r%d, r%d\n", dc->r2, dc->r0, dc->r1); } @@ -385,7 +395,7 @@ static void dec_cmpgu(DisasContext *dc) { if (dc->format == OP_FMT_RI) { LOG_DIS("cmpgui r%d, r%d, %d\n", dc->r0, dc->r1, - sign_extend(dc->imm16, 16)); + zero_extend(dc->imm16, 16)); } else { LOG_DIS("cmpgu r%d, r%d, r%d\n", dc->r2, dc->r0, dc->r1); } @@ -1027,11 +1037,6 @@ static void gen_intermediate_code_internal(CPULM32State *env, cpu_abort(env, "LM32: unaligned PC=%x\n", pc_start); } - if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) { - qemu_log("-----------------------------------------\n"); - log_cpu_state(env, 0); - } - next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE; lj = -1; num_insns = 0; diff --git a/tests/tcg/lm32/test_cmpgei.S b/tests/tcg/lm32/test_cmpgei.S index 6a8870f4c3..6e388a2a35 100644 --- a/tests/tcg/lm32/test_cmpgei.S +++ b/tests/tcg/lm32/test_cmpgei.S @@ -52,4 +52,19 @@ mvi r3, 0 cmpgei r3, r3, 0 check_r3 1 +test_name CMPGEI_11 +mvi r1, 0 +cmpgei r3, r1, -32768 +check_r3 1 + +test_name CMPGEI_12 +mvi r1, -1 +cmpgei r3, r1, -32768 +check_r3 1 + +test_name CMPGEI_13 +mvi r1, -32768 +cmpgei r3, r1, -32768 +check_r3 1 + end diff --git a/tests/tcg/lm32/test_cmpgeui.S b/tests/tcg/lm32/test_cmpgeui.S index b9d1755e22..3866d96cb7 100644 --- a/tests/tcg/lm32/test_cmpgeui.S +++ b/tests/tcg/lm32/test_cmpgeui.S @@ -52,4 +52,19 @@ mvi r3, 0 cmpgeui r3, r3, 0 check_r3 1 +test_name CMPGEUI_11 +mvi r1, 0 +cmpgeui r3, r1, 0x8000 +check_r3 0 + +test_name CMPGEUI_12 +mvi r1, -1 +cmpgeui r3, r1, 0x8000 +check_r3 1 + +test_name CMPGEUI_13 +ori r1, r0, 0x8000 +cmpgeui r3, r1, 0x8000 +check_r3 1 + end diff --git a/tests/tcg/lm32/test_cmpgi.S b/tests/tcg/lm32/test_cmpgi.S index 1f622d2900..21695f97ab 100644 --- a/tests/tcg/lm32/test_cmpgi.S +++ b/tests/tcg/lm32/test_cmpgi.S @@ -52,4 +52,19 @@ mvi r3, 0 cmpgi r3, r3, 0 check_r3 0 +test_name CMPGI_11 +mvi r1, 0 +cmpgi r3, r1, -32768 +check_r3 1 + +test_name CMPGI_12 +mvi r1, -1 +cmpgi r3, r1, -32768 +check_r3 1 + +test_name CMPGI_13 +mvi r1, -32768 +cmpgi r3, r1, -32768 +check_r3 0 + end diff --git a/tests/tcg/lm32/test_cmpgui.S b/tests/tcg/lm32/test_cmpgui.S index 759bb64b3c..dd94001492 100644 --- a/tests/tcg/lm32/test_cmpgui.S +++ b/tests/tcg/lm32/test_cmpgui.S @@ -35,7 +35,7 @@ check_r3 1 test_name CMPGUI_7 mvi r1, -1 cmpgui r3, r1, 0xffff -check_r3 0 +check_r3 1 test_name CMPGUI_8 mvi r3, 0 @@ -52,4 +52,19 @@ mvi r3, 0 cmpgui r3, r3, 0 check_r3 0 +test_name CMPGUI_11 +mvi r1, 0 +cmpgui r3, r1, 0x8000 +check_r3 0 + +test_name CMPGUI_12 +mvi r1, -1 +cmpgui r3, r1, 0x8000 +check_r3 1 + +test_name CMPGUI_13 +ori r1, r0, 0x8000 +cmpgui r3, r1, 0x8000 +check_r3 0 + end |