Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
PUAE
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PocketInsanity
PUAE
Commits
ea310c1e
Commit
ea310c1e
authored
Jan 11, 2011
by
GnoStiC
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
puae 2.3.1
parent
6ef16d06
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
114 additions
and
63 deletions
+114
-63
configure.in
configure.in
+3
-3
m68k.h
src/md-generic/m68k.h
+50
-24
m68k.h
src/md-ppc/m68k.h
+61
-36
No files found.
configure.in
View file @
ea310c1e
...
...
@@ -371,7 +371,7 @@ HOST_CPU=generic
MDFPP_H=fpp-unknown.h
case $host_cpu in
i[[3-
6
]]86)
i[[3-
7
]]86)
HOST_CPU=i386
MDFPP_H=fpp-ieee.h
;;
...
...
@@ -379,11 +379,11 @@ case $host_cpu in
HOST_CPU=amd64
MDFPP_H=fpp-ieee.h
;;
powerpc)
powerpc
*
)
HOST_CPU=ppc
MDFPP_H=fpp-ieee.h
;;
m68k)
m68k
| m680[246]0
)
HOST_CPU=68k
MDFPP_H=fpp-ieee.h
;;
...
...
src/md-generic/m68k.h
View file @
ea310c1e
...
...
@@ -11,40 +11,66 @@
* Machine-dependent structure for holding the 68k CCR flags
*/
struct
flag_struct
{
unsigned
int
c
;
unsigned
int
z
;
unsigned
int
n
;
unsigned
int
v
;
unsigned
int
cznv
;
unsigned
int
x
;
};
extern
struct
flag_struct
regflags
;
#define
ZFLG (regflags.z)
#define
NFLG (regflags.n)
#define
CFLG (regflags.c)
#define
VFLG (regflags.v)
#define
XFLG (regflags.x)
#define
FLAGBIT_N 15
#define
FLAGBIT_Z 14
#define
FLAGBIT_C 8
#define
FLAGBIT_V 0
#define
FLAGBIT_X 8
STATIC_INLINE
int
cctrue
(
int
cc
)
#define FLAGVAL_N (1 << FLAGBIT_N)
#define FLAGVAL_Z (1 << FLAGBIT_Z)
#define FLAGVAL_C (1 << FLAGBIT_C)
#define FLAGVAL_V (1 << FLAGBIT_V)
#define FLAGVAL_X (1 << FLAGBIT_X)
#define SET_ZFLG(y) (regflags.cznv = (regflags.cznv & ~FLAGVAL_Z) | (((y) ? 1 : 0) << FLAGBIT_Z))
#define SET_CFLG(y) (regflags.cznv = (regflags.cznv & ~FLAGVAL_C) | (((y) ? 1 : 0) << FLAGBIT_C))
#define SET_VFLG(y) (regflags.cznv = (regflags.cznv & ~FLAGVAL_V) | (((y) ? 1 : 0) << FLAGBIT_V))
#define SET_NFLG(y) (regflags.cznv = (regflags.cznv & ~FLAGVAL_N) | (((y) ? 1 : 0) << FLAGBIT_N))
#define SET_XFLG(y) (regflags.x = ((y) ? 1 : 0) << FLAGBIT_X)
#define GET_ZFLG() ((regflags.cznv >> FLAGBIT_Z) & 1)
#define GET_CFLG() ((regflags.cznv >> FLAGBIT_C) & 1)
#define GET_VFLG() ((regflags.cznv >> FLAGBIT_V) & 1)
#define GET_NFLG() ((regflags.cznv >> FLAGBIT_N) & 1)
#define GET_XFLG() ((regflags.x >> FLAGBIT_X) & 1)
#define CLEAR_CZNV() (regflags.cznv = 0)
#define GET_CZNV (regflags.cznv)
#define IOR_CZNV(X) (regflags.cznv |= (X))
#define SET_CZNV(X) (regflags.cznv = (X))
#define COPY_CARRY() (regflags.x = regflags.cznv)
STATIC_INLINE
int
cctrue
(
int
cc
)
{
uae_u32
cznv
=
regflags
.
cznv
;
switch
(
cc
)
{
case
0
:
return
1
;
/* T */
case
1
:
return
0
;
/* F */
case
2
:
return
!
CFLG
&&
!
ZFLG
;
/* HI */
case
3
:
return
CFLG
||
ZFLG
;
/* LS */
case
4
:
return
!
CFLG
;
/* CC */
case
5
:
return
CFLG
;
/* CS */
case
6
:
return
!
ZFLG
;
/* NE */
case
7
:
return
ZFLG
;
/* EQ */
case
8
:
return
!
VFLG
;
/* VC */
case
9
:
return
VFLG
;
/* VS */
case
10
:
return
!
NFLG
;
/* PL */
case
11
:
return
NFLG
;
/* MI */
case
12
:
return
NFLG
==
VFLG
;
/* GE */
case
13
:
return
NFLG
!=
VFLG
;
/* LT */
case
14
:
return
!
ZFLG
&&
(
NFLG
==
VFLG
);
/* GT */
case
15
:
return
ZFLG
||
(
NFLG
!=
VFLG
);
/* LE */
case
2
:
return
(
cznv
&
(
FLAGVAL_C
|
FLAGVAL_Z
))
==
0
;
/* !CFLG && !ZFLG HI */
case
3
:
return
(
cznv
&
(
FLAGVAL_C
|
FLAGVAL_Z
))
!=
0
;
/* CFLG || ZFLG LS */
case
4
:
return
(
cznv
&
FLAGVAL_C
)
==
0
;
/* !CFLG CC */
case
5
:
return
(
cznv
&
FLAGVAL_C
)
!=
0
;
/* CFLG CS */
case
6
:
return
(
cznv
&
FLAGVAL_Z
)
==
0
;
/* !ZFLG NE */
case
7
:
return
(
cznv
&
FLAGVAL_Z
)
!=
0
;
/* ZFLG EQ */
case
8
:
return
(
cznv
&
FLAGVAL_V
)
==
0
;
/* !VFLG VC */
case
9
:
return
(
cznv
&
FLAGVAL_V
)
!=
0
;
/* VFLG VS */
case
10
:
return
(
cznv
&
FLAGVAL_N
)
==
0
;
/* !NFLG PL */
case
11
:
return
(
cznv
&
FLAGVAL_N
)
!=
0
;
/* NFLG MI */
case
12
:
return
(((
cznv
<<
(
FLAGBIT_N
-
FLAGBIT_V
))
^
cznv
)
&
FLAGVAL_N
)
==
0
;
/* NFLG == VFLG GE */
case
13
:
return
(((
cznv
<<
(
FLAGBIT_N
-
FLAGBIT_V
))
^
cznv
)
&
FLAGVAL_N
)
!=
0
;
/* NFLG != VFLG LT */
case
14
:
cznv
&=
(
FLAGVAL_N
|
FLAGVAL_Z
|
FLAGVAL_V
);
/* ZFLG && (NFLG == VFLG) GT */
return
(((
cznv
<<
(
FLAGBIT_N
-
FLAGBIT_V
))
^
cznv
)
&
(
FLAGVAL_N
|
FLAGVAL_Z
))
==
0
;
case
15
:
cznv
&=
(
FLAGVAL_N
|
FLAGVAL_Z
|
FLAGVAL_V
);
/* ZFLG && (NFLG != VFLG) LE */
return
(((
cznv
<<
(
FLAGBIT_N
-
FLAGBIT_V
))
^
cznv
)
&
(
FLAGVAL_N
|
FLAGVAL_Z
))
!=
0
;
}
abort
();
return
0
;
...
...
src/md-ppc/m68k.h
View file @
ea310c1e
/*
/*
* UAE - The Un*x Amiga Emulator
*
* MC68000 emulation - machine dependent bits
...
...
@@ -6,44 +6,69 @@
* Copyright 1996 Bernd Schmidt
*/
struct
flag_struct
{
unsigned
int
c
;
unsigned
int
z
;
unsigned
int
n
;
unsigned
int
v
;
unsigned
int
cznv
;
unsigned
int
x
;
};
extern
struct
flag_struct
regflags
;
#define ZFLG (regflags.z)
#define NFLG (regflags.n)
#define CFLG (regflags.c)
#define VFLG (regflags.v)
#define XFLG (regflags.x)
#define FLAGBIT_N 15
#define FLAGBIT_Z 14
#define FLAGBIT_C 8
#define FLAGBIT_V 0
#define FLAGBIT_X 8
#define FLAGVAL_N (1 << FLAGBIT_N)
#define FLAGVAL_Z (1 << FLAGBIT_Z)
#define FLAGVAL_C (1 << FLAGBIT_C)
#define FLAGVAL_V (1 << FLAGBIT_V)
#define FLAGVAL_X (1 << FLAGBIT_X)
#define SET_ZFLG(y) (regflags.cznv = (regflags.cznv & ~FLAGVAL_Z) | (((y) ? 1 : 0) << FLAGBIT_Z))
#define SET_CFLG(y) (regflags.cznv = (regflags.cznv & ~FLAGVAL_C) | (((y) ? 1 : 0) << FLAGBIT_C))
#define SET_VFLG(y) (regflags.cznv = (regflags.cznv & ~FLAGVAL_V) | (((y) ? 1 : 0) << FLAGBIT_V))
#define SET_NFLG(y) (regflags.cznv = (regflags.cznv & ~FLAGVAL_N) | (((y) ? 1 : 0) << FLAGBIT_N))
#define SET_XFLG(y) (regflags.x = ((y) ? 1 : 0) << FLAGBIT_X)
#define GET_ZFLG() ((regflags.cznv >> FLAGBIT_Z) & 1)
#define GET_CFLG() ((regflags.cznv >> FLAGBIT_C) & 1)
#define GET_VFLG() ((regflags.cznv >> FLAGBIT_V) & 1)
#define GET_NFLG() ((regflags.cznv >> FLAGBIT_N) & 1)
#define GET_XFLG() ((regflags.x >> FLAGBIT_X) & 1)
static
__inline__
int
cctrue
(
const
int
cc
)
#define CLEAR_CZNV() (regflags.cznv = 0)
#define GET_CZNV (regflags.cznv)
#define IOR_CZNV(X) (regflags.cznv |= (X))
#define SET_CZNV(X) (regflags.cznv = (X))
#define COPY_CARRY() (regflags.x = regflags.cznv)
static
__inline__
int
cctrue
(
int
cc
)
{
switch
(
cc
){
uae_u32
cznv
=
regflags
.
cznv
;
switch
(
cc
)
{
case
0
:
return
1
;
/* T */
case
1
:
return
0
;
/* F */
case
2
:
return
!
CFLG
&&
!
ZFLG
;
/* HI */
case
3
:
return
CFLG
||
ZFLG
;
/* LS */
case
4
:
return
!
CFLG
;
/* CC */
case
5
:
return
CFLG
;
/* CS */
case
6
:
return
!
ZFLG
;
/* NE */
case
7
:
return
ZFLG
;
/* EQ */
case
8
:
return
!
VFLG
;
/* VC */
case
9
:
return
VFLG
;
/* VS */
case
10
:
return
!
NFLG
;
/* PL */
case
11
:
return
NFLG
;
/* MI */
case
12
:
return
NFLG
==
VFLG
;
/* GE */
case
13
:
return
NFLG
!=
VFLG
;
/* LT */
case
14
:
return
!
ZFLG
&&
(
NFLG
==
VFLG
);
/* GT */
case
15
:
return
ZFLG
||
(
NFLG
!=
VFLG
);
/* LE */
case
2
:
return
(
cznv
&
(
FLAGVAL_C
|
FLAGVAL_Z
))
==
0
;
/* !CFLG && !ZFLG HI */
case
3
:
return
(
cznv
&
(
FLAGVAL_C
|
FLAGVAL_Z
))
!=
0
;
/* CFLG || ZFLG LS */
case
4
:
return
(
cznv
&
FLAGVAL_C
)
==
0
;
/* !CFLG CC */
case
5
:
return
(
cznv
&
FLAGVAL_C
)
!=
0
;
/* CFLG CS */
case
6
:
return
(
cznv
&
FLAGVAL_Z
)
==
0
;
/* !ZFLG NE */
case
7
:
return
(
cznv
&
FLAGVAL_Z
)
!=
0
;
/* ZFLG EQ */
case
8
:
return
(
cznv
&
FLAGVAL_V
)
==
0
;
/* !VFLG VC */
case
9
:
return
(
cznv
&
FLAGVAL_V
)
!=
0
;
/* VFLG VS */
case
10
:
return
(
cznv
&
FLAGVAL_N
)
==
0
;
/* !NFLG PL */
case
11
:
return
(
cznv
&
FLAGVAL_N
)
!=
0
;
/* NFLG MI */
case
12
:
return
(((
cznv
<<
(
FLAGBIT_N
-
FLAGBIT_V
))
^
cznv
)
&
FLAGVAL_N
)
==
0
;
/* NFLG == VFLG GE */
case
13
:
return
(((
cznv
<<
(
FLAGBIT_N
-
FLAGBIT_V
))
^
cznv
)
&
FLAGVAL_N
)
!=
0
;
/* NFLG != VFLG LT */
case
14
:
cznv
&=
(
FLAGVAL_N
|
FLAGVAL_Z
|
FLAGVAL_V
);
/* ZFLG && (NFLG == VFLG) GT */
return
(((
cznv
<<
(
FLAGBIT_N
-
FLAGBIT_V
))
^
cznv
)
&
(
FLAGVAL_N
|
FLAGVAL_Z
))
==
0
;
case
15
:
cznv
&=
(
FLAGVAL_N
|
FLAGVAL_Z
|
FLAGVAL_V
);
/* ZFLG && (NFLG != VFLG) LE */
return
(((
cznv
<<
(
FLAGBIT_N
-
FLAGBIT_V
))
^
cznv
)
&
(
FLAGVAL_N
|
FLAGVAL_Z
))
!=
0
;
}
abort
();
abort
();
return
0
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment