Very messy but... try:

RANGE    EQU    X'80000000'
&RANGEA  SETA   RANGE
&RANGEC  SETC   (SIGNED &RANGEA)
         RNDUP  R6,&RANGEC

Robert Ngan
CSC Financial Services Group

IBM Mainframe Assembler List <[email protected]> wrote on
2015/06/25 23:35:19:

> From: Mark Boonie <[email protected]>
> To: [email protected]
> Date: 2015/06/25 23:38
> Subject: Re: Rounding to a 2G-byte boundary
> Sent by: IBM Mainframe Assembler List <[email protected]>
>
> I realize that unintuitive things happen when you start dealing with
> limits of values, but I don't understand what I'm seeing here.  I tried
> using Robert Ngan's approach and changed my code to this:
>
> RANGE    EQU   X'80000000'
> &RANGE   SETA  RANGE              SET symbol version of RANGE equate
> ...
>          RNDUP R6,&RANGE
>
> The macro now looks like this:
>
>          MACRO ,
>          RNDUP &REG,&BOUND
>          MNOTE *,'RNDUP &BOUND'
> &BND     SETA  &BOUND
>          AIF   (&BND LT 0).NEG
>
>          ALGFI &REG,&BND-1
>          AGO   .RNDDOWN
>
> .NEG     ANOP  ,
>          ALGFI &REG,&BND+1
>
> .RNDDOWN ANOP  ,
>          RNDDOWN &REG,&BND
>          MEND  ,
>
> The MNOTE produces '*,RNDUP 2147483648' which indicates that &BOUND is
> being treated as a positive number, not a negative number.  This would
> contradict the definition of a hexadecimal self-defining term in the
> Language Reference, which says:  "The maximum value of a hexadecimal term

> is X'FFFFFFFF'; this allows a range of values from ?2,147,483,648 through

> 2,147,483,647."  As a result, the SETA statement that sets &BND to the
> value of &BOUND fails with error ASMA102E, "Arithmetic term is not
> self-defining term; default=0."
>
> - mb
>
>
> IBM Mainframe Assembler List <[email protected]> wrote on
> 06/25/2015 06:33:32 PM:
>
> > From: Paul Gilmartin <[email protected]>
> > To: [email protected]
> > Date: 06/25/2015 06:33 PM
> > Subject: Re: Rounding to a 2G-byte boundary
> > Sent by: IBM Mainframe Assembler List <[email protected]>
> >
> > On 2015-06-25 16:00, Mark Boonie wrote:
> > >
> > > However, I can't specify the boundary as a symbol equated to 2G
(e.g.,
>
> > > SEGTBLRANGE EQU X'80000000') without getting an assembler error due
to
> an
> > > overflow in an intermediate value.  Does anyone have any alternative
> ways
> > >
> > It's not "an intermediate value".  X'80000000' is negative, which
> > you probably don't want.
> >
> > > to do this?  I really need the ability to handle 2G.  Thanks.
> > >
> > I guess it's finally time for the RFE, which isn't a short-term
> > solution.  It's absurd that a 32-bit assembler purports to
> > support 64-bit hardware.
> >
> > -- gil
> >

Reply via email to