Article: ARM Goes 64-bit
By: EBFE (x.delete@this.y.com), November 26, 2012 1:24 am
Room: Moderated Discussions
EduardoS (no.delete@this.spam.com) on November 23, 2012 10:09 am wrote:
> Wilco (Wilco.Dijkstra.delete@this.ntlworld.com) on November 21, 2012 7:44 am wrote:
> > Install-time compilation would be far better than using a JIT indeed. But you still may not have
> > enough memory/performance for link-time whole program optimization with profile feedback.
>
> On desktops the time consuming compilation is done at background,
> in phones it can be done during recharge time, no?
>
> Oh, and with the most up to date and relevant profile feedback.
>
Background != Free
App has to run slow interpreter/baseline compiler.
Background compilation has a large working set and seriouly competes for LLC.
>
> Every allocator use more memory than strictly necessary (later about C++), GC does
> the job of moving data toghether from time to time wich negates fragmentation.
>
> > Also the much higher memory allocation rate and resulting collections are bad for locality.
>
> Allocations are cheap, collecting short lived objects is cheap too.
>
No, collecting short lived objects is expensive.
Copying is expensive.
To make copying possible is also costy.
> > Concurrent GC has even larger overheads. It stops threads for shorter periods but stops them more often, so
> > takes far longer overall. And then we haven't considered the far higher overheads on the generated code.
>
> I don't know about what GC you are talking...
>
> The concurrent GC I have in mind originated from the non-concurrent GC, the most recent generation
> collections still blocking wich the full GC running in background until it needs blocking, so
> there is the same numbers of full stops but the most time consuming stop is shorter.
>
> Yes, it uses more resources, but on s single-threaded application
> such resources does exist, and wouldn't be used in another way.
>
However it does hurt throughput.
> > No, no space is wasted, unlike GC which requires descriptors for every object.
>
> Descriptors aren't strictly necessary and can be encoded in the vtable pointer, the
> reason many VMs doesn't omit the descriptor is because it is not that expensive.
>
> But C++ allocators waste space, for example, on Windows, before LFH deallocated objects left holes
> in the heap, some wich were left unused for lack of a suitable object, a problem called "fragmentation"
> and it is accumalative, the longer the app runs the worse it gets, see the wasted space? Locality
> isn't good either, objects go were there is space, not near related objects.
>
> LFH allocates 64k for every object size rounded to lowest higher power of 2, wich, by definition waste
> the space between that power of 2 and the actual object size, and, if there is not enough objects of
> a given size to fill the segment, it also waste the segment unused space. Locality suffers as well
> since objects are placed by it's size and related objects may end very far from each other.
>
Allocators waste space.
VM allocators have no magic over C++ allocators, except that you can't customize.
> > Since when is a memory access cheap? Every unnecesary instruction has a cost.
>
> Sure it have a cost, a non-blocking load will consume one decoder, one port
> for one cycle and one slot in a modern processor, wich will likely pass without
> being noticed, so it is a small cost, that's why I called it cheap.
>
Such small cost accumalates and it results in visible penalty.
> > The barriers and other checks for concurrent GC or multithreaded access
> > to fields are not exactly zero-cost and block many optimizations.
>
> Maybe that's why the "volatile" keyword exists?
>
> Anyway, MS doesn't implement the weak memory model that the C# or
> C++ specs allow, many applications wouldn't work if they did.
>
Totally irrelevant.
> > Wrong. Exceptions can only happen explicitly with throw in C++.
>
> Or when the program hits an undefined behaviour...
>
> And there are quite a few undefined behaviours in C++ spec.
>
> BTW, I am not limiting myself to C++ exceptions, any hardware exception is valid, VMs may handle
> exceptions by traping the hardware exceptions, if there is no try...catch block no need to
> care about order or barries, the program will crash anyway... Like it is done in C++.
>
So you elaborated that VM has overhead because it has to take more care than C++.
> > The problem is not just the ordering, but the fact that more operations can cause exceptions. That alone
> > creates a lot of overhead as you need to model flows from
> > every possible exception to all possible exception
> > handlers. Local variable values need to be preserved for example, severely limiting optimizations.
>
> If there is a registered handler...
>
How can you know if there is a registered handler?
> And the implementation can, for example, let the heavy lifting of restoring state for
> the exception handler, giving more freedom for optimizations in the normal flow.
>
> > The performance cost is high if you happen to use arrays a lot.
>
> And if the optimizer fails to remove the redundant checks.
>
C++ needs 0 check.
The optimizer usually has to leave some check uneliminated unhoisted.
And even redundant checks is diffcult to eliminate.
> Wilco (Wilco.Dijkstra.delete@this.ntlworld.com) on November 21, 2012 7:44 am wrote:
> > Install-time compilation would be far better than using a JIT indeed. But you still may not have
> > enough memory/performance for link-time whole program optimization with profile feedback.
>
> On desktops the time consuming compilation is done at background,
> in phones it can be done during recharge time, no?
>
> Oh, and with the most up to date and relevant profile feedback.
>
Background != Free
App has to run slow interpreter/baseline compiler.
Background compilation has a large working set and seriouly competes for LLC.
>
> Every allocator use more memory than strictly necessary (later about C++), GC does
> the job of moving data toghether from time to time wich negates fragmentation.
>
> > Also the much higher memory allocation rate and resulting collections are bad for locality.
>
> Allocations are cheap, collecting short lived objects is cheap too.
>
No, collecting short lived objects is expensive.
Copying is expensive.
To make copying possible is also costy.
> > Concurrent GC has even larger overheads. It stops threads for shorter periods but stops them more often, so
> > takes far longer overall. And then we haven't considered the far higher overheads on the generated code.
>
> I don't know about what GC you are talking...
>
> The concurrent GC I have in mind originated from the non-concurrent GC, the most recent generation
> collections still blocking wich the full GC running in background until it needs blocking, so
> there is the same numbers of full stops but the most time consuming stop is shorter.
>
> Yes, it uses more resources, but on s single-threaded application
> such resources does exist, and wouldn't be used in another way.
>
However it does hurt throughput.
> > No, no space is wasted, unlike GC which requires descriptors for every object.
>
> Descriptors aren't strictly necessary and can be encoded in the vtable pointer, the
> reason many VMs doesn't omit the descriptor is because it is not that expensive.
>
> But C++ allocators waste space, for example, on Windows, before LFH deallocated objects left holes
> in the heap, some wich were left unused for lack of a suitable object, a problem called "fragmentation"
> and it is accumalative, the longer the app runs the worse it gets, see the wasted space? Locality
> isn't good either, objects go were there is space, not near related objects.
>
> LFH allocates 64k for every object size rounded to lowest higher power of 2, wich, by definition waste
> the space between that power of 2 and the actual object size, and, if there is not enough objects of
> a given size to fill the segment, it also waste the segment unused space. Locality suffers as well
> since objects are placed by it's size and related objects may end very far from each other.
>
Allocators waste space.
VM allocators have no magic over C++ allocators, except that you can't customize.
> > Since when is a memory access cheap? Every unnecesary instruction has a cost.
>
> Sure it have a cost, a non-blocking load will consume one decoder, one port
> for one cycle and one slot in a modern processor, wich will likely pass without
> being noticed, so it is a small cost, that's why I called it cheap.
>
Such small cost accumalates and it results in visible penalty.
> > The barriers and other checks for concurrent GC or multithreaded access
> > to fields are not exactly zero-cost and block many optimizations.
>
> Maybe that's why the "volatile" keyword exists?
>
> Anyway, MS doesn't implement the weak memory model that the C# or
> C++ specs allow, many applications wouldn't work if they did.
>
Totally irrelevant.
> > Wrong. Exceptions can only happen explicitly with throw in C++.
>
> Or when the program hits an undefined behaviour...
>
> And there are quite a few undefined behaviours in C++ spec.
>
> BTW, I am not limiting myself to C++ exceptions, any hardware exception is valid, VMs may handle
> exceptions by traping the hardware exceptions, if there is no try...catch block no need to
> care about order or barries, the program will crash anyway... Like it is done in C++.
>
So you elaborated that VM has overhead because it has to take more care than C++.
> > The problem is not just the ordering, but the fact that more operations can cause exceptions. That alone
> > creates a lot of overhead as you need to model flows from
> > every possible exception to all possible exception
> > handlers. Local variable values need to be preserved for example, severely limiting optimizations.
>
> If there is a registered handler...
>
How can you know if there is a registered handler?
> And the implementation can, for example, let the heavy lifting of restoring state for
> the exception handler, giving more freedom for optimizations in the normal flow.
>
> > The performance cost is high if you happen to use arrays a lot.
>
> And if the optimizer fails to remove the redundant checks.
>
C++ needs 0 check.
The optimizer usually has to leave some check uneliminated unhoisted.
And even redundant checks is diffcult to eliminate.
| Topic | Posted By | Date |
|---|---|---|
| New Article: ARM Goes 64-bit | David Kanter | 08/14/12 12:04 AM |
| New Article: ARM Goes 64-bit | none | 08/14/12 12:44 AM |
| New Article: ARM Goes 64-bit | David Kanter | 08/14/12 01:04 AM |
| MIPS MT-ASE | Paul A. Clayton | 08/14/12 09:01 AM |
| MONITOR/MWAIT | EduardoS | 08/14/12 10:08 AM |
| MWAIT not specifically MT | Paul A. Clayton | 08/14/12 10:36 AM |
| MWAIT not specifically MT | EduardoS | 08/15/12 03:16 PM |
| MONITOR/MWAIT | anonymou5 | 08/14/12 11:07 AM |
| MONITOR/MWAIT | EduardoS | 08/15/12 03:20 PM |
| MIPS MT-ASE | rwessel | 08/14/12 10:14 AM |
| New Article: ARM Goes 64-bit | SHK | 08/14/12 02:01 AM |
| New Article: ARM Goes 64-bit | anon | 08/14/12 02:37 AM |
| New Article: ARM Goes 64-bit | Richard Cownie | 08/14/12 03:57 AM |
| New Article: ARM Goes 64-bit | anon | 08/14/12 04:29 AM |
| New Article: ARM Goes 64-bit | none | 08/14/12 04:44 AM |
| New Article: ARM Goes 64-bit | anon | 08/14/12 05:28 AM |
| New Article: ARM Goes 64-bit | anon | 08/14/12 05:32 AM |
| New Article: ARM Goes 64-bit | EduardoS | 08/14/12 06:06 AM |
| New Article: ARM Goes 64-bit | none | 08/14/12 05:40 AM |
| AArch64 select better than cmov | Paul A. Clayton | 08/14/12 06:08 AM |
| New Article: ARM Goes 64-bit | anon | 08/14/12 06:12 AM |
| New Article: ARM Goes 64-bit | none | 08/14/12 06:25 AM |
| Predicated ld/store are useful | Paul A. Clayton | 08/14/12 06:48 AM |
| Predicated ld/store are useful | none | 08/14/12 06:56 AM |
| Predicated ld/store are useful | anon | 08/14/12 07:07 AM |
| Predicated stores might not be that bad | Paul A. Clayton | 08/14/12 07:27 AM |
| Predicated stores might not be that bad | David Kanter | 08/15/12 01:14 AM |
| Predicated stores might not be that bad | Michael S | 08/15/12 11:41 AM |
| Predicated stores might not be that bad | R Byron | 08/17/12 04:09 AM |
| New Article: ARM Goes 64-bit | anon | 08/14/12 06:54 AM |
| New Article: ARM Goes 64-bit | none | 08/14/12 07:04 AM |
| New Article: ARM Goes 64-bit | anon | 08/14/12 07:43 AM |
| New Article: ARM Goes 64-bit | EduardoS | 08/14/12 06:07 AM |
| New Article: ARM Goes 64-bit | anon | 08/14/12 06:20 AM |
| New Article: ARM Goes 64-bit | none | 08/14/12 06:29 AM |
| New Article: ARM Goes 64-bit | anon | 08/14/12 07:00 AM |
| New Article: ARM Goes 64-bit | Michael S | 08/14/12 03:43 PM |
| New Article: ARM Goes 64-bit | Richard Cownie | 08/14/12 06:53 AM |
| OT: Conrad's "Youth" | Richard Cownie | 08/14/12 07:20 AM |
| New Article: ARM Goes 64-bit | EduardoS | 08/14/12 06:04 AM |
| New Article: ARM Goes 64-bit | mpx | 08/14/12 08:59 AM |
| New Article: ARM Goes 64-bit | Antti-Ville Tuunainen | 08/14/12 09:16 AM |
| New Article: ARM Goes 64-bit | anonymou5 | 08/14/12 11:03 AM |
| New Article: ARM Goes 64-bit | name99 | 11/17/12 03:31 PM |
| Microarchitecting a counter register | Paul A. Clayton | 11/17/12 07:37 PM |
| New Article: ARM Goes 64-bit | bakaneko | 08/14/12 04:21 AM |
| New Article: ARM Goes 64-bit | name99 | 11/17/12 03:40 PM |
| New Article: ARM Goes 64-bit | EduardoS | 11/17/12 04:52 PM |
| New Article: ARM Goes 64-bit | Doug S | 11/17/12 05:48 PM |
| New Article: ARM Goes 64-bit | bakaneko | 11/18/12 05:40 PM |
| New Article: ARM Goes 64-bit | Wilco | 11/19/12 07:59 AM |
| New Article: ARM Goes 64-bit | EduardoS | 11/19/12 08:23 AM |
| New Article: ARM Goes 64-bit | Wilco | 11/19/12 09:31 AM |
| Downloading µarch-specific binaries? | Paul A. Clayton | 11/19/12 11:21 AM |
| New Article: ARM Goes 64-bit | EduardoS | 11/19/12 11:41 AM |
| New Article: ARM Goes 64-bit | Wilco | 11/21/12 07:44 AM |
| JIT vs. static compilation (Was: New Article: ARM Goes 64-bit) | VMguy | 11/22/12 03:21 AM |
| JIT vs. static compilation (Was: New Article: ARM Goes 64-bit) | David Kanter | 11/22/12 12:12 PM |
| JIT vs. static compilation (Was: New Article: ARM Goes 64-bit) | Gabriele Svelto | 11/23/12 03:50 AM |
| New Article: ARM Goes 64-bit | EduardoS | 11/23/12 10:09 AM |
| New Article: ARM Goes 64-bit | EBFE | 11/26/12 01:24 AM |
| New Article: ARM Goes 64-bit | Gabriele Svelto | 11/26/12 03:33 AM |
| New Article: ARM Goes 64-bit | EBFE | 11/27/12 11:17 PM |
| New Article: ARM Goes 64-bit | Gabriele Svelto | 11/28/12 02:32 AM |
| New Article: ARM Goes 64-bit | EduardoS | 11/26/12 12:16 PM |
| New Article: ARM Goes 64-bit | EBFE | 11/28/12 12:33 AM |
| New Article: ARM Goes 64-bit | EduardoS | 11/28/12 05:53 AM |
| New Article: ARM Goes 64-bit | Michael S | 11/28/12 06:15 AM |
| New Article: ARM Goes 64-bit | EduardoS | 11/28/12 07:33 AM |
| New Article: ARM Goes 64-bit | Michael S | 11/28/12 09:16 AM |
| New Article: ARM Goes 64-bit | EduardoS | 11/28/12 09:53 AM |
| New Article: ARM Goes 64-bit | Eugene Nalimov | 11/28/12 05:58 PM |
| Amazing! | EduardoS | 11/28/12 07:25 PM |
| Amazing! (non-italic response) | EduardoS | 11/28/12 07:25 PM |
| Amazing! | EBFE | 11/28/12 08:20 PM |
| Undefined behaviour doubles down | EduardoS | 11/28/12 09:10 PM |
| New Article: ARM Goes 64-bit | EBFE | 11/28/12 07:54 PM |
| New Article: ARM Goes 64-bit | EduardoS | 11/28/12 09:21 PM |
| Have you heard of Transmeta? | David Kanter | 11/19/12 03:47 PM |
| New Article: ARM Goes 64-bit | bakaneko | 11/19/12 09:08 AM |
| New Article: ARM Goes 64-bit | David Kanter | 11/19/12 03:40 PM |
| Semantic Dictionary Encoding | Ray | 11/19/12 10:37 PM |
| New Article: ARM Goes 64-bit | Rohit | 11/20/12 04:48 PM |
| New Article: ARM Goes 64-bit | David Kanter | 11/20/12 11:07 PM |
| New Article: ARM Goes 64-bit | Wilco | 11/21/12 06:41 AM |
| New Article: ARM Goes 64-bit | David Kanter | 11/21/12 10:12 AM |
| A JIT example | Mark Roulo | 11/21/12 10:30 AM |
| A JIT example | Wilco | 11/21/12 07:04 PM |
| A JIT example | rwessel | 11/21/12 09:05 PM |
| A JIT example | Gabriele Svelto | 11/23/12 03:53 AM |
| A JIT example | EduardoS | 11/23/12 10:13 AM |
| A JIT example | Wilco | 11/23/12 01:41 PM |
| A JIT example | EduardoS | 11/23/12 02:06 PM |
| A JIT example | Gabriele Svelto | 11/23/12 04:09 PM |
| A JIT example | Symmetry | 11/26/12 05:58 AM |
| New Article: ARM Goes 64-bit | Ray | 11/19/12 10:27 PM |
| New Article: ARM Goes 64-bit | David Kanter | 08/14/12 09:11 AM |
| v7-M is Thumb-only | Paul A. Clayton | 08/14/12 06:58 AM |
| Minor suggested correction | Paul A. Clayton | 08/14/12 08:33 AM |
| Minor suggested correction | anon | 08/14/12 08:57 AM |
| New Article: ARM Goes 64-bit | Exophase | 08/14/12 08:33 AM |
| New Article: ARM Goes 64-bit | David Kanter | 08/14/12 09:16 AM |
| New Article: ARM Goes 64-bit | jigal | 08/15/12 01:49 PM |
| Correction re ARM and BBC Micro | Paul | 08/14/12 08:59 PM |
| Correction re ARM and BBC Micro | Per Hesselgren | 08/15/12 03:27 AM |
| Memory BW so low | Per Hesselgren | 08/15/12 03:14 AM |
| Memory BW so low | none | 08/15/12 11:16 AM |
| New Article: ARM Goes 64-bit | dado | 08/15/12 10:25 AM |
| Number of GPRs | Kenneth Jonsson | 08/16/12 02:35 PM |
| Number of GPRs | Exophase | 08/16/12 02:52 PM |
| Number of GPRs | Kenneth Jonsson | 08/17/12 02:41 AM |
| Ooops, missing link... | Kenneth Jonsson | 08/17/12 02:44 AM |
| 64-bit pointers eat some performance | Paul A. Clayton | 08/17/12 06:19 AM |
| 64-bit pointers eat some performance | bakaneko | 08/17/12 08:37 AM |
| Brute force seems to work | Paul A. Clayton | 08/17/12 10:08 AM |
| Brute force seems to work | bakaneko | 08/17/12 11:15 AM |
| 64-bit pointers eat some performance | Richard Cownie | 08/17/12 08:46 AM |
| Pointer compression is atypical | Paul A. Clayton | 08/17/12 10:43 AM |
| Pointer compression is atypical | Richard Cownie | 08/17/12 12:57 PM |
| Pointer compression is atypical | Howard Chu | 08/22/12 10:17 PM |
| Pointer compression is atypical | Richard Cownie | 08/23/12 04:48 AM |
| Pointer compression is atypical | Howard Chu | 08/23/12 06:51 AM |
| Pointer compression is atypical | Wilco | 08/17/12 02:41 PM |
| Pointer compression is atypical | Richard Cownie | 08/17/12 04:13 PM |
| Pointer compression is atypical | Ricardo B | 08/19/12 10:44 AM |
| Pointer compression is atypical | Howard Chu | 08/22/12 10:08 PM |
| Unified libraries? | Paul A. Clayton | 08/23/12 07:49 AM |
| Pointer compression is atypical | Richard Cownie | 08/23/12 08:44 AM |
| Pointer compression is atypical | Howard Chu | 08/23/12 05:17 PM |
| Pointer compression is atypical | anon | 08/23/12 08:15 PM |
| Pointer compression is atypical | Howard Chu | 08/23/12 09:33 PM |
| 64-bit pointers eat some performance | Foo_ | 08/18/12 12:09 PM |
| 64-bit pointers eat some performance | Richard Cownie | 08/18/12 05:25 PM |
| 64-bit pointers eat some performance | Richard Cownie | 08/18/12 05:32 PM |
| Page-related benefit of small pointers | Paul A. Clayton | 08/23/12 08:36 AM |
| Number of GPRs | Wilco | 08/17/12 06:31 AM |
| Number of GPRs | Kenneth Jonsson | 08/17/12 11:54 AM |
| Number of GPRs | Exophase | 08/17/12 12:44 PM |
| Number of GPRs | Kenneth Jonsson | 08/17/12 01:22 PM |
| Number of GPRs | Wilco | 08/17/12 02:53 PM |
| What about dynamic utilization? | Exophase | 08/17/12 09:30 AM |
| Compiler vs. assembly aliasing knowledge? | Paul A. Clayton | 08/17/12 10:20 AM |
| Compiler vs. assembly aliasing knowledge? | Exophase | 08/17/12 11:09 AM |
| Compiler vs. assembly aliasing knowledge? | anon | 08/18/12 02:23 AM |
| Compiler vs. assembly aliasing knowledge? | Ricardo B | 08/19/12 11:02 AM |
| Compiler vs. assembly aliasing knowledge? | anon | 08/19/12 06:07 PM |
| Compiler vs. assembly aliasing knowledge? | Ricardo B | 08/19/12 07:26 PM |
| Compiler vs. assembly aliasing knowledge? | anon | 08/19/12 10:03 PM |
| Compiler vs. assembly aliasing knowledge? | anon | 08/20/12 01:59 AM |
| Number of GPRs | David Kanter | 08/17/12 12:46 PM |
| RAT issues as part of reason 1 | Paul A. Clayton | 08/17/12 02:18 PM |
| Number of GPRs | name99 | 11/17/12 06:37 PM |
| Large ARFs increase renaming cost | Paul A. Clayton | 11/17/12 09:23 PM |
| Number of GPRs | David Kanter | 08/16/12 03:31 PM |
| Number of GPRs | Richard Cownie | 08/16/12 05:17 PM |
| 32 GPRs ~2-3% | Paul A. Clayton | 08/16/12 06:27 PM |
| Oops, Message-ID: aaed6e38-c7bd-467e-ba41-f40cf1020e5e@googlegroups.com (NT) | Paul A. Clayton | 08/16/12 06:29 PM |
| 32 GPRs ~2-3% | Exophase | 08/16/12 10:06 PM |
| R31 as SP/zero is kind of neat (NT) | Paul A. Clayton | 08/17/12 06:23 AM |
| 32 GPRs ~2-3% | rwessel | 08/17/12 08:24 AM |
| 32 GPRs ~2-3% | Exophase | 08/17/12 09:16 AM |
| 32 GPRs ~2-3% | Max | 08/17/12 04:19 PM |
| 32 GPRs ~2-3% | name99 | 11/17/12 07:43 PM |
| Number of GPRs | mpx | 08/17/12 01:11 AM |
| Latency and power | Paul A. Clayton | 08/17/12 06:54 AM |
| Number of GPRs | bakaneko | 08/17/12 03:09 AM |
| New Article: ARM Goes 64-bit | Steve | 08/17/12 02:12 PM |
| New Article: ARM Goes 64-bit | David Kanter | 08/19/12 12:42 PM |
| New Article: ARM Goes 64-bit | Doug S | 08/19/12 02:02 PM |
| New Article: ARM Goes 64-bit | Anon | 08/19/12 07:16 PM |
| New Article: ARM Goes 64-bit | Steve | 08/30/12 07:51 AM |
| Scalar vs Vector registers | Robert David Graham | 08/19/12 05:19 PM |
| Scalar vs Vector registers | David Kanter | 08/19/12 05:29 PM |
| New Article: ARM Goes 64-bit | Baserock ARM servers | 08/21/12 04:13 PM |
| Baserock ARM servers | Sysanon | 08/21/12 04:14 PM |
| A-15 virtualization and LPAE? | Paul A. Clayton | 08/21/12 06:13 PM |
| A-15 virtualization and LPAE? | Anon | 08/21/12 07:13 PM |
| Half-depth advantages? | Paul A. Clayton | 08/21/12 08:42 PM |
| Half-depth advantages? | Anon | 08/22/12 03:33 PM |
| Thanks for the information (NT) | Paul A. Clayton | 08/22/12 04:04 PM |
| A-15 virtualization and LPAE? | C. Ladisch | 08/23/12 11:12 AM |
| A-15 virtualization and LPAE? | Paul | 08/23/12 03:17 PM |
| Excessive pessimism | Paul A. Clayton | 08/23/12 04:08 PM |
| Excessive pessimism | David Kanter | 08/23/12 05:05 PM |
| New Article: ARM Goes 64-bit | Michael S | 08/22/12 07:12 AM |
| BTW, Baserock==product, Codethink==company (NT) | Paul A. Clayton | 08/22/12 08:56 AM |
| New Article: ARM Goes 64-bit | Reinoud Zandijk | 08/21/12 11:27 PM |



