[Mono-bugs] [Bug 58026][Wis] Changed - Add infrastructure for implementing icalls in IL

bugzilla-daemon@bugzilla.ximian.com bugzilla-daemon@bugzilla.ximian.com
Tue, 4 May 2004 22:25:31 -0400 (EDT)


Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.

Changed by bmaurer@users.sf.net.

http://bugzilla.ximian.com/show_bug.cgi?id=58026

--- shadow/58026	2004-05-04 15:18:37.000000000 -0400
+++ shadow/58026.tmp.9332	2004-05-04 22:25:31.000000000 -0400
@@ -1,22 +1,21 @@
 Bug#: 58026
 Product: Mono: Runtime
 Version: unspecified
-OS: 
+OS: unknown
 OS Details: 
 Status: NEW   
 Resolution: 
-Severity: 
+Severity: Unknown
 Priority: Wishlist
 Component: misc
 AssignedTo: vargaz@freemail.hu                            
 ReportedBy: vargaz@freemail.hu               
 QAContact: mono-bugs@ximian.com
 TargetMilestone: ---
 URL: 
-Cc: 
 Summary: Add infrastructure for implementing icalls in IL
 OtherBugsDependingOnThis: 52395
 
 Currently, all icalls are implemented in native C code. This means that
 calling them incures a performance penalty due to the managed->unmanaged
 transition. Also, they can't be inlined. For simple icalls, like 
@@ -46,6 +45,47 @@
 mono_register_il_icall (mono_defaults.array_class, "Rank", ....,
 array_rank_il);
 
 
 The JIT will need to be modified to handle these icalls and potentially
 inline them.
+
+------- Additional Comments From bmaurer@users.sf.net  2004-05-04 22:25 -------
+Hey Zoltan,
+
+In general I think your idea is good. However...
+
+What I would rather see is for the structures to be available to C#
+code. Imagine the following:
+
+We add structs to corlib:
+
+internal unsafe struct MonoVTable {
+    /* mono vtable fields */
+    ...
+    MonoClass* klass;
+}
+
+internal unsafe struct MonoClass {
+    ...
+    int rank;
+}
+
+[obviously, there are layout attributes missing here -- look at the
+concept].
+
+In System.Object, we would add the following field:
+
+internal MonoVTable* vtable;
+
+Thus, we could implement GetRank as:
+
+public int Rank {
+   get { return vtable->klass->rank; }
+}
+
+There are a few advantages to this, imho:
+
+1) I am not sure how your solution would play with the interp.
+2) I think the code above is alot cleaner :-).
+3) If one is required to write IL to do this stuff, i highly doubt it
+will be used as often as it can be.