From: Paul Keinanen on
On Fri, 21 May 2010 06:38:01 -0700 (PDT), MooseFET
<kensmith(a)rahul.net> wrote:

>Many people don't like self modifications but seem not to
>understand that the ability to write into a variable is just
>as dangerous as a GOTO or self modification.

One reason for the popularity of self modifying code in the old days
was simply the lack of usable addressing modes.

Lack of index registers or bad indirect addressing support often
forced to modify the effective address part of the instruction, in
order to go through each element in a table.

From: Jan Panteltje on
On a sunny day (Fri, 21 May 2010 20:09:49 -0700) it happened Robert Baer
<robertbaer(a)localnet.com> wrote in
<GZKdnaQfNKZs12rWnZ2dnUVZ_rmdnZ2d(a)posted.localnet>:

>> Now there is free code space, free code space free code space, whatshallwedo with the free code space?
>> I have some idea.
>>
>>
> If you are to compete with M$, you _must_ have software bloat!!!
> The more bloat, the better the competition!

Well, there is a trend towards sanity happeing (at least I hope so).
mainly drive by cellphones and other the like devices.
Now if they could only kill those Java snails...

I think MS realised[ that, or at least somebody there has noticed the writing on the wall.
Within the shortest time the smallest device will be able to do anything Big Bloat Billy can,
for less money, with more speed, and less resources, more stability, and without
those idiotic auto updates that refuse to switch of your PC because they are installing new bugs.
That is why I burned my xp disk, all of the above.
From: MooseFET on
On May 22, 12:44 am, Paul Keinanen <keina...(a)sci.fi> wrote:
> On Fri, 21 May 2010 06:29:43 -0700 (PDT), MooseFET
>
>
>
> <kensm...(a)rahul.net> wrote:
> >On May 20, 8:10 pm, D Yuniskis <not.going.to...(a)seen.com> wrote:
> >> MooseFET wrote:
> >> > On May 20, 9:59 am, D Yuniskis <not.going.to...(a)seen.com> wrote:
> >> > [...]
> >> >> And I could never wrap my head around the i432.  Just too "radical"
> >> >> for my sensibilities (at the time), I guess...  :<
>
> >> > Each instruction of the 432 was basically like this:
>
> >> >   if (I am allowed to) Memory[AddressingTable[i]]
> >> >                 = Memory[AddressingTable[j]]
> >> >                 + Memory[AddressingTable[k]]
>
> >> > There was no way to directly address the memory.  The machine always
> >> > had to take the time to look up the address where the object was and
> >> > check to see if this instruction is allowed on this instruction.
>
> >> Yes, they tried to make everything an "object".  It was too
> >> wacky thinking for the time.  I suspect it would still be too
> >> inefficient even with today['s technology.
>
> Current virtual memory machines have dedicated translation buffers,
> these TLBs work just like caches. In normal operation, most virtual to
> physical address translations are done in TLBs and only occasionally
> there would be a miss and a new table partition needs to be loaded
> from main memory.
>
> In the same way, the i432 addressing could work quite effectively
> these days.

The 432 would still need an extra cycle or it would have to have a
huge amount of extra hardware to make the translated version of the
address table.

The number of elements in the translation table would be far higher
than the number of elements in the TLBs. Virtual memory works with
pages much larger than just one floating point value. This would
make the accesses slower because the speed of memory tends to fall
as the sqrt() of the size.

The ALU would end up waiting on all these extra actions and delays.
There are good reasons that nobody has gone back to the idea.

>
> With suitable caching, the TMS9900 style "register set in memory"
> would also quite effective these days.

Registers maps to a linear chunk of memory could be made to work.
For most of the operation, the machine would actually work like
ones that don't map the registers to RAM. Only if an access
happens to hit the part that is mapped to the registers does
anything special need to happen.
From: Didi on
On May 22, 5:17 pm, MooseFET <kensm...(a)rahul.net> wrote:
> .....
> > With suitable caching, the TMS9900 style "register set in memory"
> > would also quite effective these days.
>
> Registers maps to a linear chunk of memory could be made to work.
> For most of the operation, the machine would actually work like
> ones that don't map the registers to RAM.  Only if an access
> happens to hit the part that is mapped to the registers does
> anything special need to happen.

The 54xx DSPs of TI have a memory-mapped set of registers (but not
all, e.g. the 40 bit accumulators are not). Quite efficient, as they
are mapped in dual-access memory (two accesses per cpu cycle), it's
been
a while since I did the assembler for it and wrote stuff but I have
no memory of any limitations because of that. In fact I think I could
at some point take advantage of the fact the registers could be
accessed also this way (with all the pipeline delay implications etc.,
but I think I did use that for something).

Dimiter

------------------------------------------------------
Dimiter Popoff Transgalactic Instruments

http://www.tgi-sci.com
------------------------------------------------------
http://www.flickr.com/photos/didi_tgi/sets/72157600228621276/


From: D Yuniskis on
Hi Paul,

Paul Keinanen wrote:
> On Fri, 21 May 2010 06:29:43 -0700 (PDT), MooseFET
> <kensmith(a)rahul.net> wrote:
>
>> On May 20, 8:10 pm, D Yuniskis <not.going.to...(a)seen.com> wrote:
>>> MooseFET wrote:
>>>> On May 20, 9:59 am, D Yuniskis <not.going.to...(a)seen.com> wrote:
>>>> [...]
>>>>> And I could never wrap my head around the i432. Just too "radical"
>>>>> for my sensibilities (at the time), I guess... :<
>>>> Each instruction of the 432 was basically like this:
>>>> if (I am allowed to) Memory[AddressingTable[i]]
>>>> = Memory[AddressingTable[j]]
>>>> + Memory[AddressingTable[k]]
>>>> There was no way to directly address the memory. The machine always
>>>> had to take the time to look up the address where the object was and
>>>> check to see if this instruction is allowed on this instruction.
>>> Yes, they tried to make everything an "object". It was too
>>> wacky thinking for the time. I suspect it would still be too
>>> inefficient even with today['s technology.
>
> Current virtual memory machines have dedicated translation buffers,
> these TLBs work just like caches. In normal operation, most virtual to
> physical address translations are done in TLBs and only occasionally
> there would be a miss and a new table partition needs to be loaded
> from main memory.

Yes, but even two level TLB's are relatively few in number
and a single entry covers a significant amount of memory.
I think the 432 dealt with much smaller "objects" than
"physical pages".

> In the same way, the i432 addressing could work quite effectively
> these days.
>
> With suitable caching, the TMS9900 style "register set in memory"
> would also quite effective these days.

I think it depends on how many register sets you end up using.
I.e., one tends to think of register set in the context of
a thread state. However, I could easily see compilers
using this feature to implement small stack frames (I bet
most blocks could benefit from a single "register context"!).
If that's the case, you'll frequently have cache misses
as you enter new blocks, etc. (of course, you will win
*while* in that context... but I am not sure what the overall
cost would be for those misses vs. having a register file
*in* the processor.)

Sounds like a good (safe) "senior project" :>