Handle GTO, LOR/STR 0 also use local base
This commit is contained in:
		
							parent
							
								
									d2006b19af
								
							
						
					
					
						commit
						1ac5d9c95a
					
				
					 2 changed files with 15 additions and 1 deletions
				
			
		|  | @ -23,6 +23,7 @@ | ||||||
| #include "../../../h/em_pseu.h" | #include "../../../h/em_pseu.h" | ||||||
| #include "../../../h/em_spec.h" | #include "../../../h/em_spec.h" | ||||||
| #include "../../../h/em_flag.h" | #include "../../../h/em_flag.h" | ||||||
|  | #include "../../../h/em_mes.h" | ||||||
| #include "../share/def.h" | #include "../share/def.h" | ||||||
| #include "cf.h" | #include "cf.h" | ||||||
| #include "cf_succ.h" | #include "cf_succ.h" | ||||||
|  | @ -303,6 +304,17 @@ STATIC interproc_analysis(p) | ||||||
| 		   case op_lxa: | 		   case op_lxa: | ||||||
| 			curproc->p_flags1 |= PF_ENVIRON; | 			curproc->p_flags1 |= PF_ENVIRON; | ||||||
| 			break; | 			break; | ||||||
|  | 		   case op_lor: | ||||||
|  | 		   case op_str: | ||||||
|  | 			if (SHORT(lnp) == 0) { | ||||||
|  | 				curproc->p_flags1 |= PF_ENVIRON; | ||||||
|  | 			} | ||||||
|  | 			break; | ||||||
|  | 		   case ps_mes: | ||||||
|  | 			if (aoff(ARG(lnp),0) == ms_gto) { | ||||||
|  | 				ENTERED_WITH_GTO(curproc); | ||||||
|  | 			} | ||||||
|  | 			break; | ||||||
| 		} | 		} | ||||||
| 	   } | 	   } | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -236,7 +236,9 @@ control_flow(head) | ||||||
| 		} else { | 		} else { | ||||||
| 		   if (!IS_RETURN(instr)) { | 		   if (!IS_RETURN(instr)) { | ||||||
| 			if (IS_UNCOND_JUMP(instr)) { | 			if (IS_UNCOND_JUMP(instr)) { | ||||||
|  | 				if (instr != op_gto) { | ||||||
| 					succeeds(TARGET(lnp),b); | 					succeeds(TARGET(lnp),b); | ||||||
|  | 				} | ||||||
| 			} else { | 			} else { | ||||||
| 				if (IS_COND_JUMP(instr)) { | 				if (IS_COND_JUMP(instr)) { | ||||||
| 					succeeds(TARGET(lnp),b); | 					succeeds(TARGET(lnp),b); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue