> Date: Tue, 24 Jul 2007 20:37:12 +0300> From: [EMAIL PROTECTED]> To: 
> [email protected]> Subject: Re: Dynamically choosing a 
> register> > as i understood, you want to do similar by telling a send oop, 
> where> to store a result.> well, you may point to stack index, or point to 
> address of memory with> given stack index.> but i'm unsure, is stack in 
> squeak are subject for GC relocations. if> so, then better use index rather 
> than pointers.Ok, I sent this mail in a rush because I didn't want to still 
> be on the train when it left my station, so I figured it wouldn't end up 
> making sense. :)What I mean is, right now MethodConext's have various fields 
> in them (BlockContexts as well, but they point to MethodContexts for most 
> information).  What I was thinking of doing was adding an addition field 
> "returnLocation".  This way the compiler can simply ensure the value that is 
> to be returned stores it's value to that area directly.Example (I means 
> instance variable location, O means Object for the general purpose registers, 
> S is a special and L is the literal frame):center  ^ origin + corner / 2might 
> be translated to:send2 #+ I1 I2 O1         ; Send the message #+ with the 
> first instance slot as the receiver (first object) and the second instance 
> slot as the argument. Store results in GP register O1send2 #/ O1 S(2) RET   ; 
> Send #/ with O1 as the receiver and the special number 2 as the argument.  
> store the result into what ever place *our caller* expects it to be storedret 
>                               ; Destroy this context and reactivate the 
> previous oneSo note above that when the receiver in O1 receives the #/ 
> message the RET field in *his* activation context will be the same as *ours 
> (i.e. center's)*.  So when he stores the answer we don't have to do anything, 
> as it is in the right place already.The complexity comes from the fact that 
> RET might be an instance variable, a temp variable location, a GP register 
> *or* it may be an actual hardware register.  But I'm not sure if that's even 
> doable without making self-modifying code, which lead to my question:  Can I 
> have some value that I pass around dynamically that "points" to a hardware 
> register?I can easily have a special encoding that says "the 3rd general 
> purpose hardware register" or even the literal x86 value that maps to e.g. 
> "eax", but how would one use this value at runtime?  C, et al don't have this 
> problem because the compiler explicitly states what values are going into 
> which registers at build time.  I have never heard of passing around a 
> register "address".Of course I could do something like (note: the following 
> pseudo code is intended to be a low level lisp-like language that compiles 
> directly to machine code):(def store-to-register (reg val)  (cond (reg)    
> ((number-that-means-eax) (store eax val)    .....But if it's going to be the 
> expensive I may as well just store into memory.  I was hoping I could do 
> something like (example in pseudo assembly this time):movRegAt %ebx, $val   ; 
> the ebx register somehow has a reference to another register and stores $val 
> there instead of ebx or memory or anywhere else.I suppose, since I have to 
> have different functions for each addressing mode anyway, I can just have the 
> routine that detects the type overwrite the register in the register store 
> routine directly every time. :)Hopefully that makes a little more sense. 
> :)Thanks,Jason
_________________________________________________________________
Don't get caught with egg on your face. Play Chicktionary!  
http://club.live.com/chicktionary.aspx?icid=chick_wlmailtextlink
_______________________________________________
Exupery mailing list
[email protected]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/exupery

Reply via email to