You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Pavel Rebriy (JIRA)" <ji...@apache.org> on 2007/03/13 11:26:09 UTC

[jira] Created: (HARMONY-3380) [drlvm][jit][winx64] JET operates incorrectly with long values.

[drlvm][jit][winx64] JET operates incorrectly with long values.
---------------------------------------------------------------

                 Key: HARMONY-3380
                 URL: https://issues.apache.org/jira/browse/HARMONY-3380
             Project: Harmony
          Issue Type: Bug
          Components: DRLVM
         Environment: windows/em64t
            Reporter: Pavel Rebriy
            Priority: Critical


While debugging DRLVM on Windows Intel64 platform I've found that JET operates incorrectly with long values and prevents some benchmarks to pass.

Here is the test:

public class Test {
    public static void main(String[] args) {
        long a = 0x00100000000L;
        long b = 0x01010101010L;
        test(a,b);
    }

    static void test( long a, long b ) {
        System.out.format("a I b = %1$x%n", (a|b) );
    }
}

RI prints:
a | b = 1110101010

Harmony (with JET):
a | b = 10101010

I think the cause is a problem in JET code generation on Windows Intel64.


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Assigned: (HARMONY-3380) [drlvm][winx64][jit] JET operates incorrectly with long values.

Posted by "Alexey Varlamov (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/HARMONY-3380?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Alexey Varlamov reassigned HARMONY-3380:
----------------------------------------

    Assignee: Alexey Varlamov

> [drlvm][winx64][jit] JET operates incorrectly with long values.
> ---------------------------------------------------------------
>
>                 Key: HARMONY-3380
>                 URL: https://issues.apache.org/jira/browse/HARMONY-3380
>             Project: Harmony
>          Issue Type: Bug
>          Components: DRLVM
>         Environment: windows/em64t
>            Reporter: Pavel Rebriy
>         Assigned To: Alexey Varlamov
>            Priority: Critical
>         Attachments: jet.fix, jet_2.fix
>
>
> While debugging DRLVM on Windows Intel64 platform I've found that JET operates incorrectly with long values and prevents some benchmarks to pass.
> Here is the test:
> public class Test {
>     public static void main(String[] args) {
>         long a = 0x00100000000L;
>         long b = 0x01010101010L;
>         test(a,b);
>     }
>     static void test( long a, long b ) {
>         System.out.format("a I b = %1$x%n", (a|b) );
>     }
> }
> RI prints:
> a | b = 1110101010
> Harmony (with JET):
> a | b = 10101010
> I think the cause is a problem in JET code generation on Windows Intel64.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Updated: (HARMONY-3380) [drlvm][winx64][jit] JET operates incorrectly with long values.

Posted by "Mikhail Fursov (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/HARMONY-3380?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Mikhail Fursov updated HARMONY-3380:
------------------------------------

    Attachment: jet_2.fix

jet_2.fix - new and complete diff with Pavel's suggestions implemented.

> [drlvm][winx64][jit] JET operates incorrectly with long values.
> ---------------------------------------------------------------
>
>                 Key: HARMONY-3380
>                 URL: https://issues.apache.org/jira/browse/HARMONY-3380
>             Project: Harmony
>          Issue Type: Bug
>          Components: DRLVM
>         Environment: windows/em64t
>            Reporter: Pavel Rebriy
>            Priority: Critical
>         Attachments: jet.fix, jet_2.fix
>
>
> While debugging DRLVM on Windows Intel64 platform I've found that JET operates incorrectly with long values and prevents some benchmarks to pass.
> Here is the test:
> public class Test {
>     public static void main(String[] args) {
>         long a = 0x00100000000L;
>         long b = 0x01010101010L;
>         test(a,b);
>     }
>     static void test( long a, long b ) {
>         System.out.format("a I b = %1$x%n", (a|b) );
>     }
> }
> RI prints:
> a | b = 1110101010
> Harmony (with JET):
> a | b = 10101010
> I think the cause is a problem in JET code generation on Windows Intel64.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Resolved: (HARMONY-3380) [drlvm][winx64][jit] JET operates incorrectly with long values.

Posted by "Alexey Varlamov (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/HARMONY-3380?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Alexey Varlamov resolved HARMONY-3380.
--------------------------------------

    Resolution: Fixed

Fixed at r518134;
changed the patch to use FMT64 instead of ifdef,
fixed a couple of warnings.

> [drlvm][winx64][jit] JET operates incorrectly with long values.
> ---------------------------------------------------------------
>
>                 Key: HARMONY-3380
>                 URL: https://issues.apache.org/jira/browse/HARMONY-3380
>             Project: Harmony
>          Issue Type: Bug
>          Components: DRLVM
>         Environment: windows/em64t
>            Reporter: Pavel Rebriy
>         Assigned To: Alexey Varlamov
>            Priority: Critical
>         Attachments: jet.fix, jet_2.fix
>
>
> While debugging DRLVM on Windows Intel64 platform I've found that JET operates incorrectly with long values and prevents some benchmarks to pass.
> Here is the test:
> public class Test {
>     public static void main(String[] args) {
>         long a = 0x00100000000L;
>         long b = 0x01010101010L;
>         test(a,b);
>     }
>     static void test( long a, long b ) {
>         System.out.format("a I b = %1$x%n", (a|b) );
>     }
> }
> RI prints:
> a | b = 1110101010
> Harmony (with JET):
> a | b = 10101010
> I think the cause is a problem in JET code generation on Windows Intel64.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Updated: (HARMONY-3380) [drlvm][winx64][jit] JET operates incorrectly with long values.

Posted by "Pavel Rebriy (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/HARMONY-3380?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Pavel Rebriy updated HARMONY-3380:
----------------------------------

    Summary: [drlvm][winx64][jit] JET operates incorrectly with long values.  (was: [drlvm][jit][winx64] JET operates incorrectly with long values.)

> [drlvm][winx64][jit] JET operates incorrectly with long values.
> ---------------------------------------------------------------
>
>                 Key: HARMONY-3380
>                 URL: https://issues.apache.org/jira/browse/HARMONY-3380
>             Project: Harmony
>          Issue Type: Bug
>          Components: DRLVM
>         Environment: windows/em64t
>            Reporter: Pavel Rebriy
>            Priority: Critical
>
> While debugging DRLVM on Windows Intel64 platform I've found that JET operates incorrectly with long values and prevents some benchmarks to pass.
> Here is the test:
> public class Test {
>     public static void main(String[] args) {
>         long a = 0x00100000000L;
>         long b = 0x01010101010L;
>         test(a,b);
>     }
>     static void test( long a, long b ) {
>         System.out.format("a I b = %1$x%n", (a|b) );
>     }
> }
> RI prints:
> a | b = 1110101010
> Harmony (with JET):
> a | b = 10101010
> I think the cause is a problem in JET code generation on Windows Intel64.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (HARMONY-3380) [drlvm][winx64][jit] JET operates incorrectly with long values.

Posted by "Pavel Rebriy (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/HARMONY-3380?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12480379 ] 

Pavel Rebriy commented on HARMONY-3380:
---------------------------------------

It's better to use POINTER_SIZE_SINT instead of jlong, because jlong is uint64 on 32-bit architecture.

> [drlvm][winx64][jit] JET operates incorrectly with long values.
> ---------------------------------------------------------------
>
>                 Key: HARMONY-3380
>                 URL: https://issues.apache.org/jira/browse/HARMONY-3380
>             Project: Harmony
>          Issue Type: Bug
>          Components: DRLVM
>         Environment: windows/em64t
>            Reporter: Pavel Rebriy
>            Priority: Critical
>         Attachments: jet.fix
>
>
> While debugging DRLVM on Windows Intel64 platform I've found that JET operates incorrectly with long values and prevents some benchmarks to pass.
> Here is the test:
> public class Test {
>     public static void main(String[] args) {
>         long a = 0x00100000000L;
>         long b = 0x01010101010L;
>         test(a,b);
>     }
>     static void test( long a, long b ) {
>         System.out.format("a I b = %1$x%n", (a|b) );
>     }
> }
> RI prints:
> a | b = 1110101010
> Harmony (with JET):
> a | b = 10101010
> I think the cause is a problem in JET code generation on Windows Intel64.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (HARMONY-3380) [drlvm][winx64][jit] JET operates incorrectly with long values.

Posted by "Alexey Varlamov (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/HARMONY-3380?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12480665 ] 

Alexey Varlamov commented on HARMONY-3380:
------------------------------------------

1) Curious - why rename? 
+typedef POINTER_SIZE_SINT int_ptr;
Me personally dislikes name POINTER_SIZE_[S]INT, but it is widely adopted in DRLVM sources.

2) I suggest to use the define PI_FMT from open/types.h instead:
-                snprintf(buf, sizeof(buf), "%ld(0x%LX)", (long int)s.lval(), (long long)s.lval());
+#ifdef _WIN32
+                snprintf(buf, sizeof(buf), "%I64d(0x%I64X)", s.lval(), s.lval());
+#else
+                snprintf(buf, sizeof(buf), "%ld(0x%LX)", (long int)s.lval(), s.lval());
+#endif


> [drlvm][winx64][jit] JET operates incorrectly with long values.
> ---------------------------------------------------------------
>
>                 Key: HARMONY-3380
>                 URL: https://issues.apache.org/jira/browse/HARMONY-3380
>             Project: Harmony
>          Issue Type: Bug
>          Components: DRLVM
>         Environment: windows/em64t
>            Reporter: Pavel Rebriy
>            Priority: Critical
>         Attachments: jet.fix, jet_2.fix
>
>
> While debugging DRLVM on Windows Intel64 platform I've found that JET operates incorrectly with long values and prevents some benchmarks to pass.
> Here is the test:
> public class Test {
>     public static void main(String[] args) {
>         long a = 0x00100000000L;
>         long b = 0x01010101010L;
>         test(a,b);
>     }
>     static void test( long a, long b ) {
>         System.out.format("a I b = %1$x%n", (a|b) );
>     }
> }
> RI prints:
> a | b = 1110101010
> Harmony (with JET):
> a | b = 10101010
> I think the cause is a problem in JET code generation on Windows Intel64.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Updated: (HARMONY-3380) [drlvm][winx64][jit] JET operates incorrectly with long values.

Posted by "Mikhail Fursov (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/HARMONY-3380?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Mikhail Fursov updated HARMONY-3380:
------------------------------------

    Attachment: jet.fix

sizeof(long) is 4 on windows64bit.
This patch must fix he problem above.

> [drlvm][winx64][jit] JET operates incorrectly with long values.
> ---------------------------------------------------------------
>
>                 Key: HARMONY-3380
>                 URL: https://issues.apache.org/jira/browse/HARMONY-3380
>             Project: Harmony
>          Issue Type: Bug
>          Components: DRLVM
>         Environment: windows/em64t
>            Reporter: Pavel Rebriy
>            Priority: Critical
>         Attachments: jet.fix
>
>
> While debugging DRLVM on Windows Intel64 platform I've found that JET operates incorrectly with long values and prevents some benchmarks to pass.
> Here is the test:
> public class Test {
>     public static void main(String[] args) {
>         long a = 0x00100000000L;
>         long b = 0x01010101010L;
>         test(a,b);
>     }
>     static void test( long a, long b ) {
>         System.out.format("a I b = %1$x%n", (a|b) );
>     }
> }
> RI prints:
> a | b = 1110101010
> Harmony (with JET):
> a | b = 10101010
> I think the cause is a problem in JET code generation on Windows Intel64.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (HARMONY-3380) [drlvm][winx64][jit] JET operates incorrectly with long values.

Posted by "Mikhail Fursov (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/HARMONY-3380?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12480722 ] 

Mikhail Fursov commented on HARMONY-3380:
-----------------------------------------

1) Historical reasons. int_ptr was already used by JET
2) I agree. I have never heard about PI_FMT before, so I used classic ifdef here. 

> [drlvm][winx64][jit] JET operates incorrectly with long values.
> ---------------------------------------------------------------
>
>                 Key: HARMONY-3380
>                 URL: https://issues.apache.org/jira/browse/HARMONY-3380
>             Project: Harmony
>          Issue Type: Bug
>          Components: DRLVM
>         Environment: windows/em64t
>            Reporter: Pavel Rebriy
>         Assigned To: Alexey Varlamov
>            Priority: Critical
>         Attachments: jet.fix, jet_2.fix
>
>
> While debugging DRLVM on Windows Intel64 platform I've found that JET operates incorrectly with long values and prevents some benchmarks to pass.
> Here is the test:
> public class Test {
>     public static void main(String[] args) {
>         long a = 0x00100000000L;
>         long b = 0x01010101010L;
>         test(a,b);
>     }
>     static void test( long a, long b ) {
>         System.out.format("a I b = %1$x%n", (a|b) );
>     }
> }
> RI prints:
> a | b = 1110101010
> Harmony (with JET):
> a | b = 10101010
> I think the cause is a problem in JET code generation on Windows Intel64.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.