Adicionando dois números de ponto flutuante

Gostaria de calcular a soma, arredondada, de dois números IEEE 754 binary64. Para esse fim, escrevi o programa C99 abaixo:

#include <stdio.h>
#include <fenv.h>
#pragma STDC FENV_ACCESS ON

int main(int c, char *v[]){
  fesetround(FE_UPWARD);
  printf("%a\n", 0x1.0p0 + 0x1.0p-80);
}

No entanto, se eu compilar e executar meu programa com vários compiladores:

$ gcc -v
…
gcc version 4.2.1 (Apple Inc. build 5664)
$ gcc -Wall -std=c99 add.c && ./a.out 
add.c:3: warning: ignoring #pragma STDC FENV_ACCESS
0x1p+0
$ clang -v
Apple clang version 1.5 (tags/Apple/clang-60)
Target: x86_64-apple-darwin10
Thread model: posix
$ clang -Wall -std=c99 add.c && ./a.out 
add.c:3:14: warning: pragma STDC FENV_ACCESS ON is not supported, ignoring
      pragma [-Wunknown-pragmas]
#pragma STDC FENV_ACCESS ON
             ^
1 warning generated.
0x1p+0

Isso não funciona! (Eu esperava o resultado0x1.0000000000001p0)

De fato, a computação foi feita em tempo de compilação no modo padrão arredondar para o mais próximo:

$ clang -Wall -std=c99 -S add.c && cat add.s
add.c:3:14: warning: pragma STDC FENV_ACCESS ON is not supported, ignoring
      pragma [-Wunknown-pragmas]
#pragma STDC FENV_ACCESS ON
             ^
1 warning generated.
…
LCPI1_0:
    .quad   4607182418800017408
…
    callq   _fesetround
    movb    $1, %cl
    movsd   LCPI1_0(%rip), %xmm0
    leaq    L_.str(%rip), %rdx
    movq    %rdx, %rdi
    movb    %cl, %al
    callq   _printf
…
L_.str:
    .asciz   "%a\n"

Sim, vi o aviso emitido por cada compilador. Entendo que ativar ou desativar as otimizações aplicáveis na escala da linha pode ser complicado. Eu ainda gostaria, se isso fosse possível, desativá-los na escala do arquivo, o que seria suficiente para resolver minha pergunta.

Minha pergunta é: quais opções de linha de comando devo usar com o GCC ou o Clang para compilar uma unidade de compilação C99 que contém código destinado a ser executado com um modo de arredondamento da FPU diferente do padrão?

Digressão

Ao pesquisar essa pergunta, encontrei estePágina de conformidade com o GCC C99, contendo a entrada abaixo, que deixarei aqui caso alguém ache engraçado. Grrrr.

floating-point      |     |
environment access  | N/A | Library feature, no compiler support required.
in <fenv.h>         |     |

questionAnswers(1)

yourAnswerToTheQuestion