Project

General

Profile

Actions

Defect #756

closed

64bit memory access fails (amd64)

Added by Runar Tenfjord 29 days ago. Updated 28 days ago.

Status:
Closed
Priority:
Normal
Category:
AMD64 Back-End
Target version:
-
% Done:

100%


Description

The following code fails:
data.asm:

.const ryu_pow5
  .align 8
  .obyte 0xC428D05AA4751E4D ; e =  -189, k =  -54
  .obyte 0xF53304714D9265E0 ; e =  -187, k =  -53
  .obyte 0x993FE2C6D07B7FAC ; e =  -184, k =  -52
  .obyte 0xBF8FDB78849A5F97 ; e =  -182, k =  -51
  .obyte 0xEF73D256A5C0F77D ; e =  -180, k =  -50
  .obyte 0x95A8637627989AAE ; e =  -177, k =  -49
  .obyte 0xBB127C53B17EC15A ; e =  -175, k =  -48
  .obyte 0xE9D71B689DDE71B0 ; e =  -173, k =  -47
  .obyte 0x9226712162AB070E ; e =  -170, k =  -46
  .obyte 0xB6B00D69BB55C8D2 ; e =  -168, k =  -45
  .obyte 0xE45C10C42A2B3B06 ; e =  -166, k =  -44
  .obyte 0x8EB98A7A9A5B04E4 ; e =  -163, k =  -43
  .obyte 0xB267ED1940F1C61D ; e =  -161, k =  -42
  .obyte 0xDF01E85F912E37A4 ; e =  -159, k =  -41
  .obyte 0x8B61313BBABCE2C7 ; e =  -156, k =  -40
  .obyte 0xAE397D8AA96C1B78 ; e =  -154, k =  -39
  .obyte 0xD9C7DCED53C72256 ; e =  -152, k =  -38
  .obyte 0x881CEA14545C7576 ; e =  -149, k =  -37
  .obyte 0xAA242499697392D3 ; e =  -147, k =  -36
  .obyte 0xD4AD2DBFC3D07788 ; e =  -145, k =  -35
  .obyte 0x84EC3C97DA624AB5 ; e =  -142, k =  -34
  .obyte 0xA6274BBDD0FADD62 ; e =  -140, k =  -33
  .obyte 0xCFB11EAD453994BB ; e =  -138, k =  -32
  .obyte 0x81CEB32C4B43FCF5 ; e =  -135, k =  -31
  .obyte 0xA2425FF75E14FC32 ; e =  -133, k =  -30
  .obyte 0xCAD2F7F5359A3B3F ; e =  -131, k =  -29
  .obyte 0xFD87B5F28300CA0E ; e =  -129, k =  -28
  .obyte 0x9E74D1B791E07E49 ; e =  -126, k =  -27
  .obyte 0xC612062576589DDB ; e =  -124, k =  -26
  .obyte 0xF79687AED3EEC552 ; e =  -122, k =  -25
  .obyte 0x9ABE14CD44753B53 ; e =  -119, k =  -24
  .obyte 0xC16D9A0095928A28 ; e =  -117, k =  -23
  .obyte 0xF1C90080BAF72CB2 ; e =  -115, k =  -22
  .obyte 0x971DA05074DA7BEF ; e =  -112, k =  -21
  .obyte 0xBCE5086492111AEB ; e =  -110, k =  -20
  .obyte 0xEC1E4A7DB69561A6 ; e =  -108, k =  -19
  .obyte 0x9392EE8E921D5D08 ; e =  -105, k =  -18
  .obyte 0xB877AA3236A4B44A ; e =  -103, k =  -17
  .obyte 0xE69594BEC44DE15C ; e =  -101, k =  -16
  .obyte 0x901D7CF73AB0ACDA ; e =   -98, k =  -15
  .obyte 0xB424DC35095CD810 ; e =   -96, k =  -14
  .obyte 0xE12E13424BB40E14 ; e =   -94, k =  -13
  .obyte 0x8CBCCC096F5088CC ; e =   -91, k =  -12
  .obyte 0xAFEBFF0BCB24AAFF ; e =   -89, k =  -11
  .obyte 0xDBE6FECEBDEDD5BF ; e =   -87, k =  -10
  .obyte 0x89705F4136B4A598 ; e =   -84, k =   -9
  .obyte 0xABCC77118461CEFD ; e =   -82, k =   -8
  .obyte 0xD6BF94D5E57A42BD ; e =   -80, k =   -7
  .obyte 0x8637BD05AF6C69B6 ; e =   -77, k =   -6
  .obyte 0xA7C5AC471B478424 ; e =   -75, k =   -5
  .obyte 0xD1B71758E219652C ; e =   -73, k =   -4
  .obyte 0x83126E978D4FDF3C ; e =   -70, k =   -3
  .obyte 0xA3D70A3D70A3D70B ; e =   -68, k =   -2
  .obyte 0xCCCCCCCCCCCCCCCD ; e =   -66, k =   -1
  .obyte 0x8000000000000000 ; e =   -63, k =    0
  .obyte 0xA000000000000000 ; e =   -61, k =    1
  .obyte 0xC800000000000000 ; e =   -59, k =    2
  .obyte 0xFA00000000000000 ; e =   -57, k =    3
  .obyte 0x9C40000000000000 ; e =   -54, k =    4
  .obyte 0xC350000000000000 ; e =   -52, k =    5
  .obyte 0xF424000000000000 ; e =   -50, k =    6
  .obyte 0x9896800000000000 ; e =   -47, k =    7
  .obyte 0xBEBC200000000000 ; e =   -45, k =    8
  .obyte 0xEE6B280000000000 ; e =   -43, k =    9
  .obyte 0x9502F90000000000 ; e =   -40, k =   10
  .obyte 0xBA43B74000000000 ; e =   -38, k =   11
  .obyte 0xE8D4A51000000000 ; e =   -36, k =   12
  .obyte 0x9184E72A00000000 ; e =   -33, k =   13
  .obyte 0xB5E620F480000000 ; e =   -31, k =   14
  .obyte 0xE35FA931A0000000 ; e =   -29, k =   15
  .obyte 0x8E1BC9BF04000000 ; e =   -26, k =   16
  .obyte 0xB1A2BC2EC5000000 ; e =   -24, k =   17
  .obyte 0xDE0B6B3A76400000 ; e =   -22, k =   18
  .obyte 0x8AC7230489E80000 ; e =   -19, k =   19
  .obyte 0xAD78EBC5AC620000 ; e =   -17, k =   20
  .obyte 0xD8D726B7177A8000 ; e =   -15, k =   21
  .obyte 0x878678326EAC9000 ; e =   -12, k =   22
  .obyte 0xA968163F0A57B400 ; e =   -10, k =   23
  .obyte 0xD3C21BCECCEDA100 ; e =    -8, k =   24
  .obyte 0x84595161401484A0 ; e =    -5, k =   25
  .obyte 0xA56FA5B99019A5C8 ; e =    -3, k =   26
  .obyte 0xCECB8F27F4200F3A ; e =    -1, k =   27
  .obyte 0x813F3978F8940984 ; e =     2, k =   28
  .obyte 0xA18F07D736B90BE5 ; e =     4, k =   29
  .obyte 0xC9F2C9CD04674EDE ; e =     6, k =   30
  .obyte 0xFC6F7C4045812296 ; e =     8, k =   31
  .obyte 0x9DC5ADA82B70B59D ; e =    11, k =   32
  .obyte 0xC5371912364CE305 ; e =    13, k =   33
  .obyte 0xF684DF56C3E01BC6 ; e =    15, k =   34
  .obyte 0x9A130B963A6C115C ; e =    18, k =   35
  .obyte 0xC097CE7BC90715B3 ; e =    20, k =   36
  .obyte 0xF0BDC21ABB48DB20 ; e =    22, k =   37
  .obyte 0x96769950B50D88F4 ; e =    25, k =   38
  .obyte 0xBC143FA4E250EB31 ; e =    27, k =   39
  .obyte 0xEB194F8E1AE525FD ; e =    29, k =   40
  .obyte 0x92EFD1B8D0CF37BE ; e =    32, k =   41
  .obyte 0xB7ABC627050305AD ; e =    34, k =   42
  .obyte 0xE596B7B0C643C719 ; e =    36, k =   43
  .obyte 0x8F7E32CE7BEA5C6F ; e =    39, k =   44
  .obyte 0xB35DBF821AE4F38B ; e =    41, k =   45
  .obyte 0xE0352F62A19E306E ; e =    43, k =   46
  .obyte 0x8C213D9DA502DE45 ; e =    46, k =   47

Ryu.mod:
MODULE Ryu;

IMPORT SYSTEM;

CONST
    MaxDecExp = 47;
    MinDecExp = -54;

VAR ^ RYUPow5 ["ryu_pow5"]: ARRAY 1 OF SYSTEM.BYTE;

PROCEDURE ComputePow5Single(k : SIGNED32): UNSIGNED64;
VAR
    i : LENGTH;
    ret : UNSIGNED64;
BEGIN
    ASSERT(k >= MinDecExp);
    ASSERT(k <= MaxDecExp);
    i := LENGTH(k - MinDecExp) * SIZE(UNSIGNED64);
    SYSTEM.GET(SYSTEM.ADR(RYUPow5[0]) + i, ret);
    RETURN ret
END ComputePow5Single;

PROCEDURE TestComputePow5;
BEGIN
    TRACE(ComputePow5Single(-54));
    TRACE(ComputePow5Single(0));
    TRACE(ComputePow5Single(47));
END TestComputePow5;

BEGIN
    TestComputePow5;
END Ryu.

Expected output:
14134776518227074637
9223372036854775808
10097419586828951109

However the code fails with:
./Ryu
Ryu.mod:116:28: note: 'ComputePow5Single (-54)' = make: *** [Makefile:32: run] Illegal instruction (core dumped)

Changing the type of ret to UNSIGNED32 the code runs.


Files

unsigned.patch (570 Bytes) unsigned.patch Florian Negele, 05 July 2026 13:25
Actions #1

Updated by Florian Negele 28 days ago

Thank you very much for reporting. Please apply the attached patch and sorry for the inconveniences.

Actions

Also available in: Atom PDF