[M3devel] eliminating volatile on floats

Jay K jay.krell at cornell.edu
Sun Jul 4 16:25:04 CEST 2010


Through simple trial/error I've tracked a need (the only need?) for floats down:

If I set flag_tree_ter = 0, I can compile m3core where I couldn't before, with -O3.


I suspect due to:

builtins.c:

int
get_pointer_alignment (tree exp, unsigned int max_align)
{
  unsigned int align, inner;

  /* We rely on TER to compute accurate alignment information.  */
  if (!(optimize && flag_tree_ter))
    return 0;


Another thing to try is #if 0 out this block of code (it is not in parse,c but "gcc  itself").
That should yield more optimization, but more patch to gcc.
I'm inclined to try that.


There should be additional options, like getting the alignment correct or such.


The code that fails to compile is:
/dev2/cm3/m3-libs/m3core/src/float/IEEE/LongFloat.m3 


PROCEDURE CopySign (x, y: T): T =
  VAR res := x;
  BEGIN
    LOOPHOLE (res, Rep.T).sign := LOOPHOLE (y, Rep.T).sign;
    RETURN res;
  END CopySign;


I also tried some other options like adding volatile and/or temporaries on loophole's using t_struct.


(To be clear, we only have volatile on float loads, not stores, though I think only stores would be preferable to only loads.
"reads are more common than writes", "consider the registers to be a write-through cache")


 - Jay
 		 	   		  


More information about the M3devel mailing list