I'm leaning towards SRST/MVCL.

--
Shmuel (Seymour J.) Metz
http://mason.gmu.edu/~smetz3
עַם יִשְׂרָאֵל חַי
נֵ֣צַח יִשְׂרָאֵ֔ל לֹ֥א יְשַׁקֵּ֖ר



________________________________________
From: IBM Mainframe Discussion List <IBM-MAIN@LISTSERV.UA.EDU> on behalf of 
Kirk Wolf <k...@coztoolkit.com>
Sent: Wednesday, October 30, 2024 4:41 PM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: Bounded string move?

Caution: This email did not originate from George Mason’s mail system. Do not 
click links or open attachments unless you recognize the sender and know the 
content is safe.


It appears to me that your requirement matches the C function below. (?)
I would probably just use C/C++, but you can see what the IBM C/C++ optimizing 
compiler generated.   It seems unlikely to me that there is a significantly 
better way.   You might ask on mvs-asm370.

size_t WordTest::wordCopy(char* out, size_t outLen, char* in, size_t inLen) {
    char* pBlank = (char*)memchr(in, ' ', inLen);
    size_t wordLen = pBlank
        ? pBlank - in
        : inLen;
    if (wordLen > outLen)
        wordLen = outLen;
    memcpy(out, in, wordLen);
    return wordLen;
}

Note: in the pseudo assembly listing, the source doesn't always appear in the 
right place in the generated code

OFFSET OBJECT CODE        LINE#  FILE#    P S E U D O   A S S E M B L Y   L I S 
T I N G

                           000188 |       *  size_t WordTest::wordCopy(char* 
out, size_t outLen, char* in, size_t inLen) {

002B48                                    @21L0      DS       0D
002B48  00C300C5                                              =F'12779717'      
 XPLink entrypoint marker
002B4C  00C500F1                                              =F'12910833'
002B50  00001398                                              =F'5016'
002B54  00000088                                              =F'136'
                                          WordTest::wordCopy(char*,unsigned
                                          int,char*,unsigned int)
002B58                    000188 |       DS       0D
002B58  906A  4788        000188 |       STM      r6,r10,1928(r4)
002B5C                    End of Prolog

002B5C  58A0  484C        000164 |   12       L        r10,in(,r4,2124)
002B60  5810  4850        000164 |   12       L        r1,inLen(,r4,2128)
002B64  1892              000145 |   12       LR       r9,r2
002B66  4100  0040        000164 |   12       LA       r0,64
002B6A  182A              000164 |   12       LR       r2,r10
002B6C  1851              000164 |   12       LR       r5,r1
002B6E  5E50  484C        000164 |   12       AL       r5,in(,r4,2124)
002B72  B25E  0052        000164 |   12       SRST     r5,r2
002B76  A714  FFFE        000164 |   12       JO       *-4
002B7A  A744  0004        000164 |   12       JL       @21L972
002B7E  4150  0000        000164 |   12       LA       r5,0
002B82                    000164 |   12   @21L972    DS       0H
                           000189 |       * char* pBlank = (char*)memchr(in, ' 
', inLen);
                           000190 |       * size_t wordLen = pBlank
002B82  EC58  0005  007E  000190 |       CIJE     r5,H'0',@21L1258
                           000191 |       *                                     
        ? pBlank - in
002B88  1F5A              000191 |       SLR      r5,r10
                           000192 |       *                                     
        : inLen;
002B8A  1815              000192 |       LR       r1,r5
002B8C                    000190 |        @21L1258   DS       0H
                           000193 |       * if (wordLen > outLen)
002B8C  EC13  0004  2077  000193 |       CLRJH    r1,r3,@21L1259
002B92  1831              000193 |       LR       r3,r1
002B94                    000193 |        @21L1259   DS       0H
002B94  1813              000145 |   12       LR       r1,r3
002B96  EC38  0016  007E  000145 |   12       CIJE     r3,H'0',@21L665
002B9C  A71A  FFFF        000145 |   12       AHI      r1,H'-1'
002BA0  1801              000145 |   12       LR       r0,r1
002BA2  8A00  0008        000145 |   12       SRA      r0,8
002BA6  A784  000B        000145 |   12       JE       @21L974
002BAA                    000145 |   12   @21L973    DS       0H
002BAA  D2FF  9000  A000  000145 |   12       MVC      
(char)(256,r9,0),(char)(r10,0)
002BB0  4190  9100        000145 |   12       LA       r9,(char)(,r9,256)
002BB4  41A0  A100        000145 |   12       LA       r10,(char)(,r10,256)
002BB8  A706  FFF9        000145 |   12       BRCT     r0,@21L973
002BBC                    000145 |   12   @21L974    DS       0H
002BBC  C610  0000  05FA  000145 |   12       EXRL     r1,F'1530'
                           000194 |       * wordLen = outLen;
                           000195 |       * memcpy(out, in, wordLen);
                           000196 |       * return wordLen;
                           000197 |       *  }
002BC2                    000197 |        @21L665    DS       0H
002BC2  989A  4794        000197 |       LM       r9,r10,1940(r4)
002BC6  47F0  7004        000197 |       B        4(,r7)


Kirk Wolf
Dovetailed Technologies
https://coztoolkit.com/

On Wed, Oct 30, 2024, at 1:03 PM, Seymour J Metz wrote:
> No, if the translated character matches it is not stored. In my case I would 
> be using a table of table dc 256al1(*-table) with a match character of space 
> and explicitly add a space to the end.
>
> --
> Shmuel (Seymour J.) Metz
> http://mason.gmu.edu/~smetz3
> עַם יִשְׂרָאֵל חַי
> נֵ֣צַח יִשְׂרָאֵ֔ל לֹ֥א יְשַׁקֵּ֖ר
>
>
>
> ________________________________________
> From: IBM Mainframe Discussion List <IBM-MAIN@LISTSERV.UA.EDU> on behalf of 
> Robin Vowels <0000054c2a8bb600-dmarc-requ...@listserv.ua.edu>
> Sent: Wednesday, October 30, 2024 2:53 AM
> To: IBM-MAIN@LISTSERV.UA.EDU
> Subject: Re: Bounded string move?
>
> Caution: This email did not originate from George Mason’s mail system. Do not 
> click links or open attachments unless you recognize the sender and know the 
> content is safe.
>
>
> On 2024-10-29 14:48, Seymour J Metz wrote:
> > You don't need to know in advance. The question I asked was about doing
> > a copy of a delimited string (in my use case, blank terminated) with
> > explicit bounds on the source and target sizes. TROO comes closest to
> > doing what I want, but it has that pesky alignment requirement.
>
> Does it move the blank?
>
> ----------------------------------------------------------------------
> For IBM-MAIN subscribe / signoff / archive access instructions,
> send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
>
>
> ----------------------------------------------------------------------
> For IBM-MAIN subscribe / signoff / archive access instructions,
> send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
>

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to