Changeset 15748
- Timestamp:
- Feb 24, 2013, 1:14:40 PM (7 years ago)
- Location:
- trunk/source/lisp-kernel
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/lisp-kernel/ppc-exceptions.c
r15470 r15748 1921 1921 egc_store_node_conditional, 1922 1922 egc_store_node_conditional_test, 1923 egc_set_hash_key, 1924 egc_gvset, 1925 egc_rplaca, 1926 egc_rplacd, 1923 egc_set_hash_key, egc_set_hash_key_did_store, 1924 egc_gvset, egc_gvset_did_store, 1925 egc_rplaca, egc_rplaca_did_store, 1926 egc_rplacd, egc_rplacd_did_store, 1927 1927 egc_set_hash_key_conditional, 1928 1928 egc_set_hash_key_conditional_test; … … 1946 1946 LispObj *ea = 0, val = 0, root = 0; 1947 1947 bitvector refbits = (bitvector)(lisp_global(REFBITS)); 1948 Boolean need_ store = true, need_check_memo = true, need_memoize_root = false;1948 Boolean need_check_memo = true, need_memoize_root = false; 1949 1949 1950 1950 if (program_counter >= &egc_set_hash_key_conditional) { … … 1954 1954 return; 1955 1955 } 1956 need_store = false;1957 1956 root = xpGPR(xp,arg_x); 1958 1957 ea = (LispObj *) (root+xpGPR(xp,arg_y)+misc_data_offset); … … 1968 1967 ea = (LispObj*)(xpGPR(xp,arg_x) + xpGPR(xp,imm4)); 1969 1968 xpGPR(xp,arg_z) = t_value; 1970 need_store = false;1971 1969 } else if (program_counter >= &egc_set_hash_key) { 1970 if (program_counter < &egc_set_hash_key_did_store) { 1971 return; 1972 } 1972 1973 root = xpGPR(xp,arg_x); 1973 1974 val = xpGPR(xp,arg_z); … … 1975 1976 need_memoize_root = true; 1976 1977 } else if (program_counter >= &egc_gvset) { 1978 if (program_counter < &egc_gvset_did_store) { 1979 return; 1980 } 1977 1981 ea = (LispObj *) (xpGPR(xp,arg_x)+xpGPR(xp,arg_y)+misc_data_offset); 1978 1982 val = xpGPR(xp,arg_z); 1979 1983 } else if (program_counter >= &egc_rplacd) { 1984 if (program_counter < &egc_rplacd_did_store) { 1985 return; 1986 } 1980 1987 ea = (LispObj *) untag(xpGPR(xp,arg_y)); 1981 1988 val = xpGPR(xp,arg_z); 1982 1989 } else { /* egc_rplaca */ 1990 if (program_counter < &egc_rplaca_did_store) { 1991 return; 1992 } 1983 1993 ea = ((LispObj *) untag(xpGPR(xp,arg_y)))+1; 1984 1994 val = xpGPR(xp,arg_z); 1985 }1986 if (need_store) {1987 *ea = val;1988 1995 } 1989 1996 if (need_check_memo) { -
trunk/source/lisp-kernel/ppc-spentry.s
r15704 r15748 464 464 /* For RPLACA and RPLACD, things are fairly simple: regardless of where we */ 465 465 /* are in the function, we can do the store (even if it's already been done) */ 466 /* Wrong: we generally only want to do it once, at most .... */ 466 467 /* and calculate whether or not we need to set the bit out-of-line. (Actually */ 467 468 /* setting the bit needs to be done atomically, unless we're sure that other */ … … 470 471 471 472 .globl C(egc_write_barrier_start) 473 .globl C(egc_rplaca_did_store) 472 474 _spentry(rplaca) 473 475 C(egc_write_barrier_start): 474 476 __(cmplr(cr2,arg_z,arg_y)) 475 477 __(_rplaca(arg_y,arg_z)) 478 C(egc_rplaca_did_store): 476 479 __(blelr cr2) 477 480 __(ref_global(imm2,ref_base)) … … 498 501 499 502 .globl C(egc_rplacd) 503 .globl C(egc_rplacd_did_store) 500 504 _spentry(rplacd) 501 505 C(egc_rplacd): 502 506 __(cmplr(cr2,arg_z,arg_y)) 503 507 __(_rplacd(arg_y,arg_z)) 508 C(egc_rplacd_did_store): 504 509 __(blelr cr2) 505 510 __(ref_global(imm2,ref_base)) … … 528 533 529 534 .globl C(egc_gvset) 535 .globl C(egc_gvset_did_store) 530 536 _spentry(gvset) 531 537 C(egc_gvset): … … 533 539 __(la imm0,misc_data_offset(arg_y)) 534 540 __(strx(arg_z,arg_x,imm0)) 541 C(egc_gvset_did_store): 535 542 __(blelr cr2) 536 543 __(add imm0,imm0,arg_x) … … 560 567 /* the store, record the address of the hash-table vector in the refmap, */ 561 568 /* as well. */ 562 .globl C(egc_set_hash_key) 569 .globl C(egc_set_hash_key) 570 .globl C(egc_set_hash_key_did_store) 563 571 _spentry(set_hash_key) 564 572 C(egc_set_hash_key): … … 566 574 __(la imm0,misc_data_offset(arg_y)) 567 575 __(strx(arg_z,arg_x,imm0)) 576 C(egc_set_hash_key_did_store): 568 577 __(blelr cr2) 569 578 __(add imm0,imm0,arg_x)
Note: See TracChangeset
for help on using the changeset viewer.