loops.cs \
initlocals.cs \
logic.cs \
- bulkcpy.il
+ bulkcpy.il \
+ math.cs
TESTSI_TMP=$(TESTSRC:.cs=.exe)
TESTSI=$(TESTSI_TMP:.il=.exe)
--- /dev/null
+using System;
+
+public class MulDiv {
+
+ public static double mathtest (int n) {
+ double res = 0;
+
+ for (int j = 0; j < 200000; j++) {
+ res += Math.Sin (j);
+ res += Math.Cos (j);
+ }
+
+ return res;
+ }
+
+ public static int Main (string[] args) {
+ int repeat = 1;
+
+ if (args.Length == 1)
+ repeat = Convert.ToInt32 (args [0]);
+
+ Console.WriteLine ("Repeat = " + repeat);
+
+ for (int i = 0; i < (repeat * 50); i++)
+ mathtest (1000);
+
+ return 0;
+ }
+}
+
+
2002-06-17 Dietmar Maurer <dietmar@ximian.com>
+ * x86.brg: added inlined versions of Math.Sin, Math.Cos, Math.Sqrt
+
* jit.c (mono_analyze_stack): impl. STARG
(mono_analyze_stack): impl. LDARGA
cm = mono_get_method (image, token, NULL);
g_assert (cm);
+ if (cm->klass == mono_defaults.math_class &&
+ cm->iflags & METHOD_IMPL_ATTRIBUTE_INTERNAL_CALL) {
+
+ if (!strcmp (cm->name, "Sin")) {
+ --sp;
+ t1 = mono_ctree_new (mp, MB_TERM_SIN, *sp, NULL);
+ PUSH_TREE (t1, VAL_DOUBLE);
+ break;
+ } else if (!strcmp (cm->name, "Cos")) {
+ --sp;
+ t1 = mono_ctree_new (mp, MB_TERM_COS, *sp, NULL);
+ PUSH_TREE (t1, VAL_DOUBLE);
+ break;
+ } else if (!strcmp (cm->name, "Sqrt")) {
+ --sp;
+ t1 = mono_ctree_new (mp, MB_TERM_SQRT, *sp, NULL);
+ PUSH_TREE (t1, VAL_DOUBLE);
+ break;
+ }
+ }
+
if (cm->klass == mono_defaults.string_class &&
*cm->name == '.' && !strcmp (cm->name, ".ctor"))
g_assert_not_reached ();
%term LDLEN LDELEMA LDFTN LDVIRTFTN LDSTR LDSFLDA
%term REMOTE_LDFLDA REMOTE_STIND_I1 REMOTE_STIND_I2 REMOTE_STIND_I4
%term REMOTE_STIND_I8 REMOTE_STIND_R4 REMOTE_STIND_R8 REMOTE_STIND_OBJ
+%term SIN COS SQRT
#
# we start at stmt
#
}
}
+freg: SIN (freg) {
+ x86_fsin (s->code);
+}
+
+freg: COS (freg) {
+ x86_fcos (s->code);
+}
+
+freg: SQRT (freg) {
+ x86_fsqrt (s->code);
+}
+
# support for value types
reg: LDIND_OBJ (reg) {
mono_defaults.corlib, "System.Reflection", "FieldInfo");
g_assert (mono_defaults.field_info_class != 0);
+ mono_defaults.math_class = mono_class_from_name (
+ mono_defaults.corlib, "System", "Math");
+ g_assert (mono_defaults.math_class != 0);
+
domain->friendly_name = g_path_get_basename (filename);
return domain;
MonoClass *mono_method_message_class;
MonoClass *appdomain_class;
MonoClass *field_info_class;
+ MonoClass *math_class;
} MonoDefaults;
extern MonoDefaults mono_defaults;