[M3commit] [modula3/cm3] ced183: Aligned_procedures always FALSE -- reduce target v...

Jay K jay.krell at cornell.edu
Mon Sep 21 04:57:21 CEST 2015


I didn't change the alignment of anything.

At a level we do not control, the alignment on NT/amd64 I believe is 4 when optimizing for space, 16 when optimizing for speed. Any alignment works, but this is what you will see in practice.I don't believe you will see 8-alignment, except typically half of the size-aligned functions that are 4-aligned.Probably all amd64 targets are like this but I'd have to check.

But we don't control this and I didn't change it.

The alignment on NT of heap allocation is two pointers.The alignment of closures in Modula-3 is presumably at least pointer.

What this does is affect the alignment check of a closure.On x86/amd64, we can safely read 4 or 8 bytes from any pointer, and compare for -1.No alignment check is needed.On other architectures, the reads need to be aligned.

What the code does, optionally, is check the alignment, and if it isn't integer-aligned,it is assumed to be code, not a closure, and the check for -1 is skipped.

What the change does is add the alignment check for all architectures.Previously it was only present for 64 bit architectures, except amd64.

Another proposal is to always clear the lower 2 bits and check for a 4 byte -1.The conditional branch would be gone.The clearing of the lower 2 bits is only to accommodate ARM32.On everything but ARM32, either alignment doesn't matter (x86/amd64) or all instructions/functionsare at least 4-aligned. Doing an 8-byte check is redundant, and risks an alignment fault.

 - Jay


Subject: Re: [M3commit] [modula3/cm3] ced183: Aligned_procedures always FALSE -- reduce target v...
From: hosking at purdue.edu
Date: Mon, 21 Sep 2015 12:48:09 +1000
CC: m3commit at elegosoft.com
To: jay.krell at cornell.edu

It's my understanding that 8-byte procedure alignment performs better on x86-64. 

Sent from my iPhone
On Sep 21, 2015, at 12:21 PM, Jay K <jay.krell at cornell.edu> wrote:




I don't think so. Calls through function pointers will incur like two extra instructions, an and and a conditional branch. All 32bit targets in fact will pay that cost, and only arm32 needs it.

I have another propose a week or so go, roughly, for all targets:   mask off lower two bits    only read 4 bytes 
   That would avoid the conditional branch.It should work for all targets also.The masking is only needed for ARM32.All other targets have either 4-byte aligned instructions, or don't care about alignment faults.

 - Jay



> Subject: Re: [M3commit] [modula3/cm3] ced183: Aligned_procedures always FALSE -- reduce target v...
> From: hosking at purdue.edu
> Date: Mon, 21 Sep 2015 10:47:05 +1000
> CC: m3commit at elegosoft.com
> To: jay.krell at cornell.edu
> 
> This will break some targets I believe. X86/x86-64 no?
> 
> Sent from my iPhone
> 
> > On Sep 21, 2015, at 2:43 AM, jaykrell <jay.krell at cornell.edu> wrote:
> > 
> >  Branch: refs/heads/master
> >  Home:   https://github.com/modula3/cm3
> >  Commit: ced183d086a829001f44ea5f8f791df2e3952d4f
> >      https://github.com/modula3/cm3/commit/ced183d086a829001f44ea5f8f791df2e3952d4f
> >  Author: jaykrell <jay.krell at cornell.edu>
> >  Date:   2015-09-20 (Sun, 20 Sep 2015)
> > 
> >  Changed paths:
> >    M m3-sys/m3middle/src/Target.m3
> > 
> >  Log Message:
> >  -----------
> >  Aligned_procedures always FALSE -- reduce target variation
> > 
> > 
> > _______________________________________________
> > M3commit mailing list
> > M3commit at elegosoft.com
> > https://mail.elegosoft.com/cgi-bin/mailman/listinfo/m3commit
 		 	   		  
 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://m3lists.elegosoft.com/pipermail/m3commit/attachments/20150921/7b3b4cc6/attachment-0002.html>


More information about the M3commit mailing list