Changeset 7c012e8


Ignore:
Timestamp:
Jun 18, 2023, 8:25:25 AM (10 months ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
master
Children:
60c3d87e, 739bd7b
Parents:
b87ef7be
Message:

simplify computation for ceiling, add unsigned qualifiers on one_t constants in ceiling_div

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/math.hfa

    rb87ef7be r7c012e8  
    1010// Created On       : Mon Apr 18 23:37:04 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sat Jun 17 22:59:42 2023
    13 // Update Count     : 199
     12// Last Modified On : Sun Jun 18 08:13:53 2023
     13// Update Count     : 202
    1414//
    1515
     
    371371
    372372inline __attribute__((always_inline)) static {
    373         signed char floor( signed char n, signed char align ) { return n / align * align; }
    374         unsigned char floor( unsigned char n, unsigned char align ) { return n / align * align; }
    375         short int floor( short int n, short int align ) { return n / align * align; }
    376         unsigned short int floor( unsigned short int n, unsigned short int align ) { return n / align * align; }
    377         int floor( int n, int align ) { return n / align * align; }
    378         unsigned int floor( unsigned int n, unsigned int align ) { return n / align * align; }
    379         long int floor( long int n, long int align ) { return n / align * align; }
    380         unsigned long int floor( unsigned long int n, unsigned long int align ) { return n / align * align; }
    381         long long int floor( long long int n, long long int align ) { return n / align * align; }
    382         unsigned long long int floor( unsigned long long int n, unsigned long long int align ) { return n / align * align; }
     373        // force divide before multiply
     374        signed char floor( signed char n, signed char align ) { return (n / align) * align; }
     375        unsigned char floor( unsigned char n, unsigned char align ) { return (n / align) * align; }
     376        short int floor( short int n, short int align ) { return (n / align) * align; }
     377        unsigned short int floor( unsigned short int n, unsigned short int align ) { return (n / align) * align; }
     378        int floor( int n, int align ) { return (n / align) * align; }
     379        unsigned int floor( unsigned int n, unsigned int align ) { return (n / align) * align; }
     380        long int floor( long int n, long int align ) { return (n / align) * align; }
     381        unsigned long int floor( unsigned long int n, unsigned long int align ) { return (n / align) * align; }
     382        long long int floor( long long int n, long long int align ) { return (n / align) * align; }
     383        unsigned long long int floor( unsigned long long int n, unsigned long long int align ) { return (n / align) * align; }
    383384
    384385        // forall( T | { T ?/?( T, T ); T ?*?( T, T ); } )
    385         // T floor( T n, T align ) { return n / align * align; }
     386        // T floor( T n, T align ) { return (n / align) * align; }
    386387
    387388        signed char ceiling_div( signed char n, char align ) { return (n + (align - 1hh)) / align; }
    388         unsigned char ceiling_div( unsigned char n, unsigned char align ) { return (n + (align - 1hh)) / align; }
     389        unsigned char ceiling_div( unsigned char n, unsigned char align ) { return (n + (align - 1hhu)) / align; }
    389390        short int ceiling_div( short int n, short int align ) { return (n + (align - 1h)) / align; }
    390         unsigned short int ceiling_div( unsigned short int n, unsigned short int align ) { return (n + (align - 1h)) / align; }
     391        unsigned short int ceiling_div( unsigned short int n, unsigned short int align ) { return (n + (align - 1hu)) / align; }
    391392        int ceiling_div( int n, int align ) { return (n + (align - 1n)) / align; }
    392         unsigned int ceiling_div( unsigned int n, unsigned int align ) { return (n + (align - 1n)) / align; }
     393        unsigned int ceiling_div( unsigned int n, unsigned int align ) { return (n + (align - 1nu)) / align; }
    393394        long int ceiling_div( long int n, long int align ) { return (n + (align - 1l)) / align; }
    394         unsigned long int ceiling_div( unsigned long int n, unsigned long int align ) { return (n + (align - 1l)) / align; }
     395        unsigned long int ceiling_div( unsigned long int n, unsigned long int align ) { return (n + (align - 1lu)) / align; }
    395396        long long int ceiling_div( long long int n, long long int align ) { return (n + (align - 1ll)) / align; }
    396         unsigned long long int ceiling_div( unsigned long long int n, unsigned long long int align ) { return (n + (align - 1ll)) / align; }
     397        unsigned long long int ceiling_div( unsigned long long int n, unsigned long long int align ) { return (n + (align - 1llu)) / align; }
    397398
    398399        signed char ceiling( signed char n, char align ) {
    399                 align = align < 0 ? -align : align;                             // align must be signed
    400                 typeof(n) trunc = floor( n, align );
    401                 return n >= 0 ? trunc + (trunc != n ? align : 0) : trunc;
     400                typeof(n) trunc = floor( n, align );
     401                return n < 0 || n == trunc ? trunc : trunc + align;
    402402        }
    403403        unsigned char ceiling( unsigned char n, unsigned char align ) {
    404404                typeof(n) trunc = floor( n, align );
    405                 return n >= 0 ? trunc + (trunc != n ? align : 0) : trunc;
     405                return n == trunc ? trunc : trunc + align;
    406406        }
    407407        short int ceiling( short int n, short int align ) {
    408                 align = align < 0 ? -align : align;                             // align must be signed
    409                 typeof(n) trunc = floor( n, align );
    410                 return n >= 0 ? trunc + (trunc != n ? align : 0) : trunc;
     408                typeof(n) trunc = floor( n, align );
     409                return n < 0 || n == trunc ? trunc : trunc + align;
    411410        }
    412411        unsigned short int ceiling( unsigned short int n, unsigned short int align ) {
    413412                typeof(n) trunc = floor( n, align );
    414                 return n >= 0 ? trunc + (trunc != n ? align : 0) : trunc;
     413                return n == trunc ? trunc : trunc + align;
    415414        }
    416415        int ceiling( int n, int align ) {
    417                 align = align < 0 ? -align : align;                             // align must be signed
    418                 typeof(n) trunc = floor( n, align );
    419                 return n >= 0 ? trunc + (trunc != n ? align : 0) : trunc;
     416                typeof(n) trunc = floor( n, align );
     417                return n < 0 || n == trunc ? trunc : trunc + align;
    420418        }
    421419        unsigned int ceiling( unsigned int n, unsigned int align ) {
    422420                typeof(n) trunc = floor( n, align );
    423                 return n >= 0 ? trunc + (trunc != n ? align : 0) : trunc;
     421                return n == trunc ? trunc : trunc + align;
    424422        }
    425423        long int ceiling( long int n, long int align ) {
    426                 align = align < 0 ? -align : align;                             // align must be signed
    427                 typeof(n) trunc = floor( n, align );
    428                 return n >= 0 ? trunc + (trunc != n ? align : 0) : trunc;
     424                typeof(n) trunc = floor( n, align );
     425                return n < 0 || n == trunc ? trunc : trunc + align;
    429426        }
    430427        unsigned long int ceiling( unsigned long int n, unsigned long int align ) {
    431428                typeof(n) trunc = floor( n, align );
    432                 return n >= 0 ? trunc + (trunc != n ? align : 0) : trunc;
     429                return n == trunc ? trunc : trunc + align;
    433430        }
    434431        long long int ceiling( long long int n, signed long long int align ) {
    435                 align = align < 0 ? -align : align;                             // align must be signed
    436                 typeof(n) trunc = floor( n, align );
    437                 return n >= 0 ? trunc + (trunc != n ? align : 0) : trunc;
     432                typeof(n) trunc = floor( n, align );
     433                return n < 0 || n == trunc ? trunc : trunc + align;
    438434        }
    439435        unsigned long long int ceiling( unsigned long long int n, unsigned long long int align ) {
    440436                typeof(n) trunc = floor( n, align );
    441                 return n >= 0 ? trunc + (trunc != n ? align : 0) : trunc;
     437                return n == trunc ? trunc : trunc + align;
    442438        }
    443439
Note: See TracChangeset for help on using the changeset viewer.