X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=cyclone68000.git;a=blobdiff_plain;f=OpAny.cpp;h=64e2bfe5213ff0b9405e9773b40bb0d29c820483;hp=63a7e1ff2cadc9fe66ede75e0a181583fa62a052;hb=ee2d42257a2d52072f6b163f8ec279503241e9de;hpb=c204973a7053e21bd3177f82aaab5ebb59f39401 diff --git a/OpAny.cpp b/OpAny.cpp index 63a7e1f..64e2bfe 100644 --- a/OpAny.cpp +++ b/OpAny.cpp @@ -159,6 +159,58 @@ int OpGetFlags(int subtract,int xbit,int specialz) return 0; } +void OpGetFlagsNZ(int rd) +{ + ot(" and r10,r%d,#0x80000000 ;@ r10=N_flag\n",rd); + ot(" orreq r10,r10,#0x40000000 ;@ get NZ, clear CV\n"); +} + +// size 0=8bit, 1=16bit +void SignExtend(int rd, int rs, int size) +{ + if (size >= 2) + { + if (rd != rs) + ot(" mov r%d,r%d\n", rd, rs); + return; + } +#if defined(HAVE_ARMv6) && (HAVE_ARMv6) + if (size == 1) + ot(" sxth r%d,r%d ;@ sign extend\n", rd, rs); + else + ot(" sxtb r%d,r%d ;@ sign extend\n", rd, rs); +#else + int shift = size ? 16 : 24; + ot(" mov r%d,r%d,asl #%d\n", rd, rs, shift); + ot(" mov r%d,r%d,asr #%d ;@ sign extend\n", rd, rd, shift); +#endif +} + +void ZeroExtend(int rd, int rs, int size) +{ + if (size >= 2) + { + if (rd != rs) + ot(" mov r%d,r%d\n", rd, rs); + return; + } +#if defined(HAVE_ARMv6) && (HAVE_ARMv6) + if (size == 1) + ot(" uxth r%d,r%d ;@ zero extend\n", rd, rs); + else +#else + if (size == 1) + { + ot(" mov r%d,r%d,lsl #16\n", rd, rs); + ot(" mov r%d,r%d,lsr #16 ;@ zero extend\n", rd, rd); + } + else +#endif + { + ot(" and r%d,r%d,#0xff ;@ zero extend\n", rd, rs); + } +} + // ----------------------------------------------------------------- int g_op;