162306a36Sopenharmony_ci/* 262306a36Sopenharmony_ci * fp_movem.S 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * Copyright Roman Zippel, 1997. All rights reserved. 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Redistribution and use in source and binary forms, with or without 762306a36Sopenharmony_ci * modification, are permitted provided that the following conditions 862306a36Sopenharmony_ci * are met: 962306a36Sopenharmony_ci * 1. Redistributions of source code must retain the above copyright 1062306a36Sopenharmony_ci * notice, and the entire permission notice in its entirety, 1162306a36Sopenharmony_ci * including the disclaimer of warranties. 1262306a36Sopenharmony_ci * 2. Redistributions in binary form must reproduce the above copyright 1362306a36Sopenharmony_ci * notice, this list of conditions and the following disclaimer in the 1462306a36Sopenharmony_ci * documentation and/or other materials provided with the distribution. 1562306a36Sopenharmony_ci * 3. The name of the author may not be used to endorse or promote 1662306a36Sopenharmony_ci * products derived from this software without specific prior 1762306a36Sopenharmony_ci * written permission. 1862306a36Sopenharmony_ci * 1962306a36Sopenharmony_ci * ALTERNATIVELY, this product may be distributed under the terms of 2062306a36Sopenharmony_ci * the GNU General Public License, in which case the provisions of the GPL are 2162306a36Sopenharmony_ci * required INSTEAD OF the above restrictions. (This clause is 2262306a36Sopenharmony_ci * necessary due to a potential bad interaction between the GPL and 2362306a36Sopenharmony_ci * the restrictions contained in a BSD-style copyright.) 2462306a36Sopenharmony_ci * 2562306a36Sopenharmony_ci * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED 2662306a36Sopenharmony_ci * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 2762306a36Sopenharmony_ci * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 2862306a36Sopenharmony_ci * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 2962306a36Sopenharmony_ci * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 3062306a36Sopenharmony_ci * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 3162306a36Sopenharmony_ci * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 3262306a36Sopenharmony_ci * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 3362306a36Sopenharmony_ci * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 3462306a36Sopenharmony_ci * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 3562306a36Sopenharmony_ci * OF THE POSSIBILITY OF SUCH DAMAGE. 3662306a36Sopenharmony_ci */ 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci#include "fp_emu.h" 3962306a36Sopenharmony_ci#include "fp_decode.h" 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci| set flags for decode macros for fmovem 4262306a36Sopenharmony_cido_fmovem=1 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci .globl fp_fmovem_fp, fp_fmovem_cr 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci| %d1 contains the mask and count of the register list 4762306a36Sopenharmony_ci| for other register usage see fp_decode.h 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_cifp_fmovem_fp: 5062306a36Sopenharmony_ci printf PDECODE,"fmovem.x " 5162306a36Sopenharmony_ci | get register list and count them 5262306a36Sopenharmony_ci btst #11,%d2 5362306a36Sopenharmony_ci jne 1f 5462306a36Sopenharmony_ci bfextu %d2{#24,#8},%d0 | static register list 5562306a36Sopenharmony_ci jra 2f 5662306a36Sopenharmony_ci1: bfextu %d2{#25,#3},%d0 | dynamic register list 5762306a36Sopenharmony_ci jsr fp_get_data_reg 5862306a36Sopenharmony_ci2: move.l %d0,%d1 5962306a36Sopenharmony_ci swap %d1 6062306a36Sopenharmony_ci jra 2f 6162306a36Sopenharmony_ci1: addq.w #1,%d1 | count the # of registers in 6262306a36Sopenharmony_ci2: lsr.b #1,%d0 | register list and keep it in %d1 6362306a36Sopenharmony_ci jcs 1b 6462306a36Sopenharmony_ci jne 2b 6562306a36Sopenharmony_ci printf PDECODE,"#%08x",1,%d1 6662306a36Sopenharmony_ci#ifdef FPU_EMU_DEBUG 6762306a36Sopenharmony_ci btst #12,%d2 6862306a36Sopenharmony_ci jne 1f 6962306a36Sopenharmony_ci printf PDECODE,"-" | decremental move 7062306a36Sopenharmony_ci jra 2f 7162306a36Sopenharmony_ci1: printf PDECODE,"+" | incremental move 7262306a36Sopenharmony_ci2: btst #13,%d2 7362306a36Sopenharmony_ci jeq 1f 7462306a36Sopenharmony_ci printf PDECODE,"->" | fpu -> cpu 7562306a36Sopenharmony_ci jra 2f 7662306a36Sopenharmony_ci1: printf PDECODE,"<-" | fpu <- cpu 7762306a36Sopenharmony_ci2: 7862306a36Sopenharmony_ci#endif 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_ci | decode address mode 8162306a36Sopenharmony_ci fp_decode_addr_mode 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci .long fp_ill, fp_ill 8462306a36Sopenharmony_ci .long fpr_indirect, fpr_postinc 8562306a36Sopenharmony_ci .long fpr_predecr, fpr_disp16 8662306a36Sopenharmony_ci .long fpr_extmode0, fpr_extmode1 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci | addressing mode: address register indirect 8962306a36Sopenharmony_cifpr_indirect: 9062306a36Sopenharmony_ci fp_mode_addr_indirect 9162306a36Sopenharmony_ci jra fpr_do_movem 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ci | addressing mode: address register indirect with postincrement 9462306a36Sopenharmony_cifpr_postinc: 9562306a36Sopenharmony_ci fp_mode_addr_indirect_postinc 9662306a36Sopenharmony_ci jra fpr_do_movem 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_cifpr_predecr: 9962306a36Sopenharmony_ci fp_mode_addr_indirect_predec 10062306a36Sopenharmony_ci jra fpr_do_movem 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ci | addressing mode: address register/programm counter indirect 10362306a36Sopenharmony_ci | with 16bit displacement 10462306a36Sopenharmony_cifpr_disp16: 10562306a36Sopenharmony_ci fp_mode_addr_indirect_disp16 10662306a36Sopenharmony_ci jra fpr_do_movem 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_cifpr_extmode0: 10962306a36Sopenharmony_ci fp_mode_addr_indirect_extmode0 11062306a36Sopenharmony_ci jra fpr_do_movem 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_cifpr_extmode1: 11362306a36Sopenharmony_ci fp_decode_addr_reg 11462306a36Sopenharmony_ci jmp ([0f:w,%pc,%d0*4]) 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_ci .align 4 11762306a36Sopenharmony_ci0: 11862306a36Sopenharmony_ci .long fpr_absolute_short, fpr_absolute_long 11962306a36Sopenharmony_ci .long fpr_disp16, fpr_extmode0 12062306a36Sopenharmony_ci .long fp_ill, fp_ill 12162306a36Sopenharmony_ci .long fp_ill, fp_ill 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_cifpr_absolute_short: 12462306a36Sopenharmony_ci fp_mode_abs_short 12562306a36Sopenharmony_ci jra fpr_do_movem 12662306a36Sopenharmony_ci 12762306a36Sopenharmony_cifpr_absolute_long: 12862306a36Sopenharmony_ci fp_mode_abs_long 12962306a36Sopenharmony_ci| jra fpr_do_movem 13062306a36Sopenharmony_ci 13162306a36Sopenharmony_cifpr_do_movem: 13262306a36Sopenharmony_ci swap %d1 | get fpu register list 13362306a36Sopenharmony_ci lea (FPD_FPREG,FPDATA),%a1 13462306a36Sopenharmony_ci moveq #12,%d0 13562306a36Sopenharmony_ci btst #12,%d2 13662306a36Sopenharmony_ci jne 1f 13762306a36Sopenharmony_ci lea (-12,%a1,%d0*8),%a1 13862306a36Sopenharmony_ci neg.l %d0 13962306a36Sopenharmony_ci1: btst #13,%d2 14062306a36Sopenharmony_ci jne 4f 14162306a36Sopenharmony_ci | move register from memory into fpu 14262306a36Sopenharmony_ci jra 3f 14362306a36Sopenharmony_ci1: printf PMOVEM,"(%p>%p)",2,%a0,%a1 14462306a36Sopenharmony_ci getuser.l (%a0)+,%d2,fp_err_ua1,%a0 14562306a36Sopenharmony_ci lsr.l #8,%d2 14662306a36Sopenharmony_ci lsr.l #7,%d2 14762306a36Sopenharmony_ci lsr.w #1,%d2 14862306a36Sopenharmony_ci move.l %d2,(%a1)+ 14962306a36Sopenharmony_ci getuser.l (%a0)+,%d2,fp_err_ua1,%a0 15062306a36Sopenharmony_ci move.l %d2,(%a1)+ 15162306a36Sopenharmony_ci getuser.l (%a0),%d2,fp_err_ua1,%a0 15262306a36Sopenharmony_ci move.l %d2,(%a1) 15362306a36Sopenharmony_ci subq.l #8,%a0 15462306a36Sopenharmony_ci subq.l #8,%a1 15562306a36Sopenharmony_ci add.l %d0,%a0 15662306a36Sopenharmony_ci2: add.l %d0,%a1 15762306a36Sopenharmony_ci3: lsl.b #1,%d1 15862306a36Sopenharmony_ci jcs 1b 15962306a36Sopenharmony_ci jne 2b 16062306a36Sopenharmony_ci jra 5f 16162306a36Sopenharmony_ci | move register from fpu into memory 16262306a36Sopenharmony_ci1: printf PMOVEM,"(%p>%p)",2,%a1,%a0 16362306a36Sopenharmony_ci move.l (%a1)+,%d2 16462306a36Sopenharmony_ci lsl.w #1,%d2 16562306a36Sopenharmony_ci lsl.l #7,%d2 16662306a36Sopenharmony_ci lsl.l #8,%d2 16762306a36Sopenharmony_ci putuser.l %d2,(%a0)+,fp_err_ua1,%a0 16862306a36Sopenharmony_ci move.l (%a1)+,%d2 16962306a36Sopenharmony_ci putuser.l %d2,(%a0)+,fp_err_ua1,%a0 17062306a36Sopenharmony_ci move.l (%a1),%d2 17162306a36Sopenharmony_ci putuser.l %d2,(%a0),fp_err_ua1,%a0 17262306a36Sopenharmony_ci subq.l #8,%a1 17362306a36Sopenharmony_ci subq.l #8,%a0 17462306a36Sopenharmony_ci add.l %d0,%a0 17562306a36Sopenharmony_ci2: add.l %d0,%a1 17662306a36Sopenharmony_ci4: lsl.b #1,%d1 17762306a36Sopenharmony_ci jcs 1b 17862306a36Sopenharmony_ci jne 2b 17962306a36Sopenharmony_ci5: 18062306a36Sopenharmony_ci printf PDECODE,"\n" 18162306a36Sopenharmony_ci#if 0 18262306a36Sopenharmony_ci lea (FPD_FPREG,FPDATA),%a0 18362306a36Sopenharmony_ci printf PMOVEM,"fp:" 18462306a36Sopenharmony_ci printx PMOVEM,%a0@(0) 18562306a36Sopenharmony_ci printx PMOVEM,%a0@(12) 18662306a36Sopenharmony_ci printf PMOVEM,"\n " 18762306a36Sopenharmony_ci printx PMOVEM,%a0@(24) 18862306a36Sopenharmony_ci printx PMOVEM,%a0@(36) 18962306a36Sopenharmony_ci printf PMOVEM,"\n " 19062306a36Sopenharmony_ci printx PMOVEM,%a0@(48) 19162306a36Sopenharmony_ci printx PMOVEM,%a0@(60) 19262306a36Sopenharmony_ci printf PMOVEM,"\n " 19362306a36Sopenharmony_ci printx PMOVEM,%a0@(72) 19462306a36Sopenharmony_ci printx PMOVEM,%a0@(84) 19562306a36Sopenharmony_ci printf PMOVEM,"\n" 19662306a36Sopenharmony_ci#endif 19762306a36Sopenharmony_ci jra fp_end 19862306a36Sopenharmony_ci 19962306a36Sopenharmony_ci| set flags for decode macros for fmovem control register 20062306a36Sopenharmony_cido_fmovem=1 20162306a36Sopenharmony_cido_fmovem_cr=1 20262306a36Sopenharmony_ci 20362306a36Sopenharmony_cifp_fmovem_cr: 20462306a36Sopenharmony_ci printf PDECODE,"fmovem.cr " 20562306a36Sopenharmony_ci | get register list and count them 20662306a36Sopenharmony_ci bfextu %d2{#19,#3},%d0 20762306a36Sopenharmony_ci move.l %d0,%d1 20862306a36Sopenharmony_ci swap %d1 20962306a36Sopenharmony_ci jra 2f 21062306a36Sopenharmony_ci1: addq.w #1,%d1 21162306a36Sopenharmony_ci2: lsr.l #1,%d0 21262306a36Sopenharmony_ci jcs 1b 21362306a36Sopenharmony_ci jne 2b 21462306a36Sopenharmony_ci printf PDECODE,"#%08x",1,%d1 21562306a36Sopenharmony_ci#ifdef FPU_EMU_DEBUG 21662306a36Sopenharmony_ci btst #13,%d2 21762306a36Sopenharmony_ci jeq 1f 21862306a36Sopenharmony_ci printf PDECODE,"->" | fpu -> cpu 21962306a36Sopenharmony_ci jra 2f 22062306a36Sopenharmony_ci1: printf PDECODE,"<-" | fpu <- cpu 22162306a36Sopenharmony_ci2: 22262306a36Sopenharmony_ci#endif 22362306a36Sopenharmony_ci 22462306a36Sopenharmony_ci | decode address mode 22562306a36Sopenharmony_ci fp_decode_addr_mode 22662306a36Sopenharmony_ci 22762306a36Sopenharmony_ci .long fpc_data, fpc_addr 22862306a36Sopenharmony_ci .long fpc_indirect, fpc_postinc 22962306a36Sopenharmony_ci .long fpc_predecr, fpc_disp16 23062306a36Sopenharmony_ci .long fpc_extmode0, fpc_extmode1 23162306a36Sopenharmony_ci 23262306a36Sopenharmony_cifpc_data: 23362306a36Sopenharmony_ci fp_mode_data_direct 23462306a36Sopenharmony_ci move.w %d0,%d1 23562306a36Sopenharmony_ci bfffo %d2{#19,#3},%d0 23662306a36Sopenharmony_ci sub.w #19,%d0 23762306a36Sopenharmony_ci lea (FPD_FPCR,FPDATA,%d0.w*4),%a1 23862306a36Sopenharmony_ci btst #13,%d2 23962306a36Sopenharmony_ci jne 1f 24062306a36Sopenharmony_ci move.w %d1,%d0 24162306a36Sopenharmony_ci jsr fp_get_data_reg 24262306a36Sopenharmony_ci move.l %d0,(%a1) 24362306a36Sopenharmony_ci jra fpc_movem_fin 24462306a36Sopenharmony_ci1: move.l (%a1),%d0 24562306a36Sopenharmony_ci jsr fp_put_data_reg 24662306a36Sopenharmony_ci jra fpc_movem_fin 24762306a36Sopenharmony_ci 24862306a36Sopenharmony_cifpc_addr: 24962306a36Sopenharmony_ci fp_decode_addr_reg 25062306a36Sopenharmony_ci printf PDECODE,"a%d",1,%d0 25162306a36Sopenharmony_ci btst #13,%d2 25262306a36Sopenharmony_ci jne 1f 25362306a36Sopenharmony_ci jsr fp_get_addr_reg 25462306a36Sopenharmony_ci move.l %a0,(FPD_FPIAR,FPDATA) 25562306a36Sopenharmony_ci jra fpc_movem_fin 25662306a36Sopenharmony_ci1: move.l (FPD_FPIAR,FPDATA),%a0 25762306a36Sopenharmony_ci jsr fp_put_addr_reg 25862306a36Sopenharmony_ci jra fpc_movem_fin 25962306a36Sopenharmony_ci 26062306a36Sopenharmony_cifpc_indirect: 26162306a36Sopenharmony_ci fp_mode_addr_indirect 26262306a36Sopenharmony_ci jra fpc_do_movem 26362306a36Sopenharmony_ci 26462306a36Sopenharmony_cifpc_postinc: 26562306a36Sopenharmony_ci fp_mode_addr_indirect_postinc 26662306a36Sopenharmony_ci jra fpc_do_movem 26762306a36Sopenharmony_ci 26862306a36Sopenharmony_cifpc_predecr: 26962306a36Sopenharmony_ci fp_mode_addr_indirect_predec 27062306a36Sopenharmony_ci jra fpc_do_movem 27162306a36Sopenharmony_ci 27262306a36Sopenharmony_cifpc_disp16: 27362306a36Sopenharmony_ci fp_mode_addr_indirect_disp16 27462306a36Sopenharmony_ci jra fpc_do_movem 27562306a36Sopenharmony_ci 27662306a36Sopenharmony_cifpc_extmode0: 27762306a36Sopenharmony_ci fp_mode_addr_indirect_extmode0 27862306a36Sopenharmony_ci jra fpc_do_movem 27962306a36Sopenharmony_ci 28062306a36Sopenharmony_cifpc_extmode1: 28162306a36Sopenharmony_ci fp_decode_addr_reg 28262306a36Sopenharmony_ci jmp ([0f:w,%pc,%d0*4]) 28362306a36Sopenharmony_ci 28462306a36Sopenharmony_ci .align 4 28562306a36Sopenharmony_ci0: 28662306a36Sopenharmony_ci .long fpc_absolute_short, fpc_absolute_long 28762306a36Sopenharmony_ci .long fpc_disp16, fpc_extmode0 28862306a36Sopenharmony_ci .long fpc_immediate, fp_ill 28962306a36Sopenharmony_ci .long fp_ill, fp_ill 29062306a36Sopenharmony_ci 29162306a36Sopenharmony_cifpc_absolute_short: 29262306a36Sopenharmony_ci fp_mode_abs_short 29362306a36Sopenharmony_ci jra fpc_do_movem 29462306a36Sopenharmony_ci 29562306a36Sopenharmony_cifpc_absolute_long: 29662306a36Sopenharmony_ci fp_mode_abs_long 29762306a36Sopenharmony_ci jra fpc_do_movem 29862306a36Sopenharmony_ci 29962306a36Sopenharmony_cifpc_immediate: 30062306a36Sopenharmony_ci fp_get_pc %a0 30162306a36Sopenharmony_ci lea (%a0,%d1.w*4),%a1 30262306a36Sopenharmony_ci fp_put_pc %a1 30362306a36Sopenharmony_ci printf PDECODE,"#imm" 30462306a36Sopenharmony_ci| jra fpc_do_movem 30562306a36Sopenharmony_ci#if 0 30662306a36Sopenharmony_ci swap %d1 30762306a36Sopenharmony_ci lsl.l #5,%d1 30862306a36Sopenharmony_ci lea (FPD_FPCR,FPDATA),%a0 30962306a36Sopenharmony_ci jra 3f 31062306a36Sopenharmony_ci1: move.l %d0,(%a0) 31162306a36Sopenharmony_ci2: addq.l #4,%a0 31262306a36Sopenharmony_ci3: lsl.b #1,%d1 31362306a36Sopenharmony_ci jcs 1b 31462306a36Sopenharmony_ci jne 2b 31562306a36Sopenharmony_ci jra fpc_movem_fin 31662306a36Sopenharmony_ci#endif 31762306a36Sopenharmony_ci 31862306a36Sopenharmony_cifpc_do_movem: 31962306a36Sopenharmony_ci swap %d1 | get fpu register list 32062306a36Sopenharmony_ci lsl.l #5,%d1 32162306a36Sopenharmony_ci lea (FPD_FPCR,FPDATA),%a1 32262306a36Sopenharmony_ci1: btst #13,%d2 32362306a36Sopenharmony_ci jne 4f 32462306a36Sopenharmony_ci 32562306a36Sopenharmony_ci | move register from memory into fpu 32662306a36Sopenharmony_ci jra 3f 32762306a36Sopenharmony_ci1: printf PMOVEM,"(%p>%p)",2,%a0,%a1 32862306a36Sopenharmony_ci getuser.l (%a0)+,%d0,fp_err_ua1,%a0 32962306a36Sopenharmony_ci move.l %d0,(%a1) 33062306a36Sopenharmony_ci2: addq.l #4,%a1 33162306a36Sopenharmony_ci3: lsl.b #1,%d1 33262306a36Sopenharmony_ci jcs 1b 33362306a36Sopenharmony_ci jne 2b 33462306a36Sopenharmony_ci jra fpc_movem_fin 33562306a36Sopenharmony_ci 33662306a36Sopenharmony_ci | move register from fpu into memory 33762306a36Sopenharmony_ci1: printf PMOVEM,"(%p>%p)",2,%a1,%a0 33862306a36Sopenharmony_ci move.l (%a1),%d0 33962306a36Sopenharmony_ci putuser.l %d0,(%a0)+,fp_err_ua1,%a0 34062306a36Sopenharmony_ci2: addq.l #4,%a1 34162306a36Sopenharmony_ci4: lsl.b #1,%d1 34262306a36Sopenharmony_ci jcs 1b 34362306a36Sopenharmony_ci jne 2b 34462306a36Sopenharmony_ci 34562306a36Sopenharmony_cifpc_movem_fin: 34662306a36Sopenharmony_ci and.l #0x0000fff0,(FPD_FPCR,FPDATA) 34762306a36Sopenharmony_ci and.l #0x0ffffff8,(FPD_FPSR,FPDATA) 34862306a36Sopenharmony_ci move.l (FPD_FPCR,FPDATA),%d0 34962306a36Sopenharmony_ci lsr.l #4,%d0 35062306a36Sopenharmony_ci moveq #3,%d1 35162306a36Sopenharmony_ci and.l %d0,%d1 35262306a36Sopenharmony_ci move.w %d1,(FPD_RND,FPDATA) 35362306a36Sopenharmony_ci lsr.l #2,%d0 35462306a36Sopenharmony_ci moveq #3,%d1 35562306a36Sopenharmony_ci and.l %d0,%d1 35662306a36Sopenharmony_ci move.w %d1,(FPD_PREC,FPDATA) 35762306a36Sopenharmony_ci printf PDECODE,"\n" 35862306a36Sopenharmony_ci#if 0 35962306a36Sopenharmony_ci printf PMOVEM,"fpcr : %08x\n",1,FPDATA@(FPD_FPCR) 36062306a36Sopenharmony_ci printf PMOVEM,"fpsr : %08x\n",1,FPDATA@(FPD_FPSR) 36162306a36Sopenharmony_ci printf PMOVEM,"fpiar: %08x\n",1,FPDATA@(FPD_FPIAR) 36262306a36Sopenharmony_ci clr.l %d0 36362306a36Sopenharmony_ci move.w (FPD_PREC,FPDATA),%d0 36462306a36Sopenharmony_ci printf PMOVEM,"prec : %04x\n",1,%d0 36562306a36Sopenharmony_ci move.w (FPD_RND,FPDATA),%d0 36662306a36Sopenharmony_ci printf PMOVEM,"rnd : %04x\n",1,%d0 36762306a36Sopenharmony_ci#endif 36862306a36Sopenharmony_ci jra fp_end 369