Changeset 14971
- Timestamp:
- Sep 7, 2011, 1:53:21 PM (13 years ago)
- Location:
- trunk/source/lisp-kernel
- Files:
-
- 6 edited
-
arm-constants.h (modified) (1 diff)
-
arm-constants.s (modified) (2 diffs)
-
arm-gc.c (modified) (2 diffs)
-
arm-macros.s (modified) (4 diffs)
-
arm-spentry.s (modified) (9 diffs)
-
lisp-debug.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/lisp-kernel/arm-constants.h
r14965 r14971 41 41 #define allocbase temp0 /* while consing */ 42 42 43 /* Non-volatile pseudo node regs kept in s28-s31 */44 #define save0 2845 #define save1 2946 #define save2 3047 #define save3 3148 43 49 44 #define nbits_in_word 32 -
trunk/source/lisp-kernel/arm-constants.s
r14965 r14971 65 65 define(`pc',`r15') 66 66 67 /* We can keep node values in some single-float registers. By definition,68 those registers aren't general-purpose, but copying between them and69 GPRs may be faster than using the stack would be. */70 define(`save0',`s28')71 define(`save1',`s29')72 define(`save2',`s30')73 define(`save3',`s31')74 67 75 68 nargregs = 3 … … 329 322 _node(last_lisp_frame) /* from TCR */ 330 323 _node(code_vector) /* of fn in lisp_frame, or 0 */ 331 _field(nvrs,4*node_size)332 324 _endstructf 333 325 -
trunk/source/lisp-kernel/arm-gc.c
r14965 r14971 1073 1073 mark_root((regs[r])); 1074 1074 } 1075 #ifdef LINUX1076 {1077 LispObj *vfp_info = (LispObj *)find_vfp_info(xp);1078 int nvr;1079 1080 if (vfp_info == NULL) {1081 Bug(NULL, "No VFP info in exception context!");1082 }1083 1084 for (nvr = save0;nvr <= save3;nvr++) {1085 mark_root(vfp_info[nvr]);1086 }1087 }1088 #endif1089 1075 1090 1076 … … 1368 1354 } 1369 1355 1370 #ifdef LINUX1371 {1372 void *find_vfp_info(ExceptionInformation *);1373 LispObj* nvrs = (LispObj *)find_vfp_info(xp);1374 1375 for (r=save0;r<=save3;r++) {1376 update_noderef(&nvrs[r]);1377 }1378 }1379 #endif1380 1356 1381 1357 update_locref((LispObj*) (&(xpPC(xp)))); -
trunk/source/lisp-kernel/arm-macros.s
r14965 r14971 340 340 ') 341 341 342 /* Save the lisp non-volatile FPRs. */ 342 /* Save the lisp non-volatile FPRs. These are exactly the same as the foreign 343 FPRs. */ 343 344 define(`push_lisp_fprs',` 344 __(movc16(imm0,make_header( 6,subtag_double_float_vector)))345 __(movc16(imm0,make_header(8,subtag_double_float_vector))) 345 346 __(mov imm1,#0) 346 347 __(fmdrr d7,imm0,imm1) 347 __(fstmfdd sp!,{d7-d1 3})348 __(fstmfdd sp!,{d7-d15}) 348 349 ') 349 350 … … 357 358 /* Pop the lisp non-volatile FPRs */ 358 359 define(`pop_lisp_fprs',` 359 __(fldmfdd sp!,{d7-d1 3})360 ') 361 362 /* Reload the non-volatile lisp FPRs (d8-d1 3) from the stack-consed vector360 __(fldmfdd sp!,{d7-d15}) 361 ') 362 363 /* Reload the non-volatile lisp FPRs (d8-d15) from the stack-consed vector 363 364 on top of the stack, leaving the vector in place. d7 winds up with 364 365 a denormalized float in it, if anything cares. */ 365 366 define(`restore_lisp_fprs',` 366 __(fldmfdd $1,{d7-d1 3})367 __(fldmfdd $1,{d7-d15}) 367 368 ') 368 369 … … 370 371 FPRs. */ 371 372 define(`discard_lisp_fprs',` 372 __(add sp,sp,# 7*8)373 __(add sp,sp,#9*8) 373 374 ') 374 375 … … 393 394 __(add imm0,sp,#fulltag_misc) 394 395 __(str imm0,[rcontext,#tcr.catch_top]) 395 __(add imm0,imm0,#catch_frame.nvrs)396 __(fstmias imm0,{save0-save3})397 396 __(add lr,lr,#4) 398 397 ') -
trunk/source/lisp-kernel/arm-spentry.s
r14965 r14971 2349 2349 _spentry(progvrestore) 2350 2350 __(skip_stack_vector(imm0,imm1,sp)) 2351 __(ldr imm0,[imm0,#lisp_frame.size+( 7*8)+node_size]) /* 7*8 = size of saved FPR vector, with header */2351 __(ldr imm0,[imm0,#lisp_frame.size+(9*8)+node_size]) /* 7*8 = size of saved FPR vector, with header */ 2352 2352 __(cmp imm0,#0) 2353 2353 __(unbox_fixnum(imm0,imm0)) … … 2859 2859 __(ldr arg_y,[rcontext,#tcr.last_lisp_frame]) 2860 2860 __(stmdb vsp!,{arg_y,arg_x,temp0,temp1,temp2}) 2861 __(fstmdbs vsp!,{save0-save3})2862 2861 __(str vsp,[rcontext,#tcr.save_vsp]) 2863 2862 /* There's a u32 vector on top of the stack ; its first data word points … … 2895 2894 __(mov arg_x,#0) 2896 2895 __(mov fn,#0) 2897 __(fmsr save0,arg_z)2898 __(fcpys save1,save0)2899 __(fcpys save2,save0)2900 __(fcpys save3,save0)2901 2896 __(mov allocptr,#VOID_ALLOCPTR) 2902 2897 __(mov rcontext,temp0) … … 2905 2900 __(ldr allocptr,[rcontext,#tcr.save_allocptr]) 2906 2901 __(restore_lisp_frame(temp0)) 2907 __(fldmias vsp!,{save0-save3})2908 2902 __(ldmia vsp!,{arg_y,arg_x,temp0,temp1,temp2}) 2909 2903 __(str arg_y,[rcontext,#tcr.last_lisp_frame]) … … 3121 3115 __(mov fn,#0) 3122 3116 __(ldr vsp,[rcontext,#tcr.save_vsp]) 3123 __(fmsr save0,arg_z)3124 __(fcpys save1,save0)3125 __(fcpys save2,save0)3126 __(fcpys save3,save0)3127 3117 __(mov imm0,#TCR_STATE_LISP) 3128 3118 __(str imm0,[rcontext,#tcr.valence]) … … 3999 3989 __(ldr imm0,[temp0,#catch_frame.link]) 4000 3990 __(str imm0,[rcontext,#tcr.catch_top]) 4001 __(add imm0,sp,#catch_frame.nvrs+fulltag_misc)4002 __(fldmias imm0,{save0-save3})4003 3991 __(ldr fn,[sp,#catch_frame.size+lisp_frame.savefn]) 4004 3992 __(ldr lr,[sp,#catch_frame.size+lisp_frame.savelr]) … … 4040 4028 /* Save our caller's LR and FN in the csp frame created by the unwind- */ 4041 4029 /* protect. (Clever, eh ?) */ 4042 __(flds save0,[sp,#fulltag_misc+catch_frame.nvrs+(0*node_size)])4043 __(flds save1,[sp,#fulltag_misc+catch_frame.nvrs+(1*node_size)])4044 __(flds save2,[sp,#fulltag_misc+catch_frame.nvrs+(2*node_size)])4045 __(flds save3,[sp,#fulltag_misc+catch_frame.nvrs+(3*node_size)])4046 4030 __(add sp,sp,#catch_frame.size) 4047 4031 /* We used to use a swp instruction to exchange the lr with … … 4137 4121 __(str arg_x,[rcontext,#tcr.xframe]) 4138 4122 __(str arg_z,[rcontext,#tcr.last_lisp_frame]) 4139 __(flds save0,[sp,#fulltag_misc+catch_frame.nvrs+(0*node_size)])4140 __(flds save1,[sp,#fulltag_misc+catch_frame.nvrs+(1*node_size)])4141 __(flds save2,[sp,#fulltag_misc+catch_frame.nvrs+(2*node_size)])4142 __(flds save3,[sp,#fulltag_misc+catch_frame.nvrs+(3*node_size)])4143 4123 __(add sp,sp,#catch_frame.size) 4144 4124 __(add imm1,nargs,#node_size) … … 4393 4373 __(stmdb sp!,{imm0,imm2}) 4394 4374 __(push_foreign_fprs()) 4395 __(fmsr save0,arg_z)4396 __(fcpys save1,save0)4397 __(fcpys save2,save0)4398 __(fcpys save3,save0)4399 4375 __(mov imm0,#TCR_STATE_LISP) 4400 4376 __(str imm0,[rcontext,#tcr.valence]) -
trunk/source/lisp-kernel/lisp-debug.c
r14965 r14971 792 792 show_lisp_register(xp, "temp1/fname/next_method_context", temp1); 793 793 show_lisp_register(xp, "temp2/nfn", temp2); 794 #ifdef LINUX795 {796 LispObj *nvrs = (LispObj *)find_vfp_info(xp);797 798 if (nvrs != NULL) {799 int r;800 801 for(r=save0;r<=save3;r++) {802 fprintf(dbgout,"s%02d (save%d) = %s\n",r,r-save0,print_lisp_object(nvrs[r]));803 }804 }805 }806 #endif807 794 } 808 795 #endif … … 1113 1100 b, xpGPR(xp, b)); 1114 1101 } 1115 #ifdef LINUX1116 {1117 LispObj *nvrs = (LispObj *)find_vfp_info(xp);1118 1119 if (nvrs != NULL) {1120 for(a=save0,b=save2;a<save2;a++,b++) {1121 fprintf(dbgout,"s%02d = 0x%08lX s%02d = 0x%08lX\n",1122 a, nvrs[a], b, nvrs[b]);1123 }1124 }1125 }1126 #endif1127 1102 #endif 1128 1103 … … 1230 1205 1231 1206 1232 for (dn=0,fn=0;dn<1 4;dn++) { /* d14/d15 (s28-s31) contain lisp values */1207 for (dn=0,fn=0;dn<16;dn++) { 1233 1208 fprintf(dbgout, "s%02d = %10e (0x%08x) s%02d = %10e (0x%08x)\n",fn,fp[fn],up[fn],fn+1,fp[fn+1],up[fn+1]); 1234 1209 fn+=2;
Note:
See TracChangeset
for help on using the changeset viewer.
