aboutsummaryrefslogtreecommitdiff
path: root/target-alpha/op.c
diff options
context:
space:
mode:
Diffstat (limited to 'target-alpha/op.c')
-rw-r--r--target-alpha/op.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/target-alpha/op.c b/target-alpha/op.c
index 529a66de0..da93e7cdf 100644
--- a/target-alpha/op.c
+++ b/target-alpha/op.c
@@ -22,6 +22,7 @@
#include "config.h"
#include "exec.h"
+#include "host-utils.h"
#include "op_helper.h"
@@ -140,11 +141,15 @@ void OPPROTO op_tb_flush (void)
#define MEMSUFFIX _raw
#include "op_mem.h"
#if !defined(CONFIG_USER_ONLY)
-#define MEMSUFFIX _user
-#include "op_mem.h"
#define MEMSUFFIX _kernel
#include "op_mem.h"
-/* Those are used for supervisor, executive and pal modes */
+#define MEMSUFFIX _executive
+#include "op_mem.h"
+#define MEMSUFFIX _supervisor
+#include "op_mem.h"
+#define MEMSUFFIX _user
+#include "op_mem.h"
+/* This is used for pal modes */
#define MEMSUFFIX _data
#include "op_mem.h"
#endif
@@ -291,7 +296,7 @@ void OPPROTO op_mullv (void)
void OPPROTO op_mulq (void)
{
- T0 *= T1;
+ T0 = (int64_t)T0 * (int64_t)T1;
RETURN();
}
@@ -303,7 +308,10 @@ void OPPROTO op_mulqv (void)
void OPPROTO op_umulh (void)
{
- helper_umulh();
+ uint64_t tl, th;
+
+ mulu64(&tl, &th, T0, T1);
+ T0 = th;
RETURN();
}