Manuel López-Ibáñez <lopezibanez at gmail dot com> wrote:
> Anything not documented there is likely to change or be removed in the
> future, so you should not rely on it. On the other hand, if you find
> some behaviour that you feel should be documented and it is not,
> please submit a documentation patch (or at least open a bug report).

 Well, do I have any chance to have the 'asm (" %c0 ": : "" );' and
'asm (" %a0 ": : "" );' documented if I submit a bug report?

I am using the %c when I want to access a field of a complex global
structure in assembly, like (to put in a non inlined function):
asm volatile (" go_msg = %c0 " : : "p" (gujin_param.go_msg) );
then "go_msg" can be used like any other symbol in a 50 lines 'asm ("");'

I am using the %a in such two functions:

typedef farptr unsigned;
extern inline unsigned char
EMM386_get_state (farptr entrypoint)
  {
  unsigned short ax = 0x0000;

#if 0 /* doesn't work */
  asm ASMREAD (" lcallw *%1  # EMM386_entry_point, EMM386_get_state "
        : "+a" (ax)
        : "m" (entrypoint)
        );
#else
  asm ASMREAD (" lcallw *%a1  # EMM386_entry_point, EMM386_get_state "
        : "+a" (ax)
        : "pr" (&entrypoint)
        );
#endif
  return ax >> 8;
  }

extern inline unsigned short
_XMS_global_enable_A20 (farptr entrypoint, unsigned char *error)
  {
  unsigned short result;

  asm volatile (" lcallw *%a3   # XMS entry point, _XMS_global_enable_A20 "
        : "=a" (result), "=b" (*error)
        : "a" (0x0300), "pr" (&entrypoint), "m" (entrypoint)
        );
  if (result == 1)
      return 0; /* success */
    else
      return 1;
  }

I did not find any other working way to do it...

Regards,
 Etienne.



Reply via email to