* src/vm/jit/stack.c (stack_analyse): Do not set argintreguse to
[cacao.git] / src / vm / builtintable.inc
1 /* src/vm/builtintable.inc - tables of builtin functions
2
3    Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
4    C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
5    E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
6    J. Wenninger, Institut f. Computersprachen - TU Wien
7
8    This file is part of CACAO.
9
10    This program is free software; you can redistribute it and/or
11    modify it under the terms of the GNU General Public License as
12    published by the Free Software Foundation; either version 2, or (at
13    your option) any later version.
14
15    This program is distributed in the hope that it will be useful, but
16    WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18    General Public License for more details.
19
20    You should have received a copy of the GNU General Public License
21    along with this program; if not, write to the Free Software
22    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
23    02110-1301, USA.
24
25    Contact: cacao@cacaojvm.org
26
27    Authors: Christian Thalinger
28
29    Changes:
30
31    $Id: builtintable.inc 5251 2006-08-18 13:01:00Z twisti $
32
33 */
34
35
36 #include "config.h"
37
38 #include "arch.h"
39
40 #if defined(ENABLE_THREADS)
41 # include "threads/native/lock.h"
42 #endif
43
44 #include "vm/builtin.h"
45 #include "vm/jit/jit.h"
46
47
48 /* internal and not automatically replaced functions **************************/
49
50 static builtintable_entry builtintable_internal[] = {
51
52 #if defined(__ALPHA__) || defined(DISABLE_GC)
53         {
54                 ICMD_F2L,
55                 BUILTIN_f2l,
56                 NULL,
57                 "f2l",
58                 "(F)J",
59                 NULL,
60                 NULL,
61                 NULL,
62                 false,
63                 NULL
64         },
65         {
66                 ICMD_D2L,
67                 BUILTIN_d2l,
68                 NULL,
69                 "d2l",
70                 "(D)J",
71                 NULL,
72                 NULL,
73                 NULL,
74                 false,
75                 NULL
76         },
77         {
78                 ICMD_F2I,
79                 BUILTIN_f2i,
80                 NULL,
81                 "f2i",
82                 "(F)I",
83                 NULL,
84                 NULL,
85                 NULL,
86                 false,
87                 NULL
88         },
89         {
90                 ICMD_D2I,
91                 BUILTIN_d2i,
92                 NULL,
93                 "d2i",
94                 "(D)I",
95                 NULL,
96                 NULL,
97                 NULL,
98                 false,
99                 NULL
100         },
101 #endif
102
103 #if !SUPPORT_DIVISION || defined(DISABLE_GC)
104         {
105                 ICMD_IDIV,
106                 BUILTIN_idiv,
107                 NULL,
108                 "idiv",
109                 "(II)I",
110                 NULL,
111                 NULL,
112                 NULL,
113                 false,
114                 NULL
115         },
116         {
117                 ICMD_IREM,
118                 BUILTIN_irem,
119                 NULL,
120                 "irem",
121                 "(II)I",
122                 NULL,
123                 NULL,
124                 NULL,
125                 false,
126                 NULL
127         },
128 #endif
129
130 #if !(SUPPORT_DIVISION && SUPPORT_LONG && SUPPORT_LONG_DIV) || defined(DISABLE_GC)
131         {
132                 ICMD_LDIV,
133                 BUILTIN_ldiv,
134                 NULL,
135                 "ldiv",
136                 "(JJ)J",
137                 NULL,
138                 NULL,
139                 NULL,
140                 false,
141                 NULL
142         },
143         {
144                 ICMD_LREM,
145                 BUILTIN_lrem,
146                 NULL,
147                 "lrem",
148                 "(JJ)J",
149                 NULL,
150                 NULL,
151                 NULL,
152                 false,
153                 NULL
154         },
155 #endif
156
157         {
158                 ICMD_FREM,
159                 BUILTIN_frem,
160                 NULL,
161                 "frem",
162                 "(FF)F",
163                 NULL,
164                 NULL,
165                 NULL,
166                 false,
167                 NULL
168         },
169         {
170                 ICMD_DREM,
171                 BUILTIN_drem,
172                 NULL,
173                 "drem",
174                 "(DD)D",
175                 NULL,
176                 NULL,
177                 NULL,
178                 false,
179                 NULL
180         },
181
182
183         /* internal functions *****************************************************/
184
185         {
186                 ICMD_NEW,
187                 BUILTIN_new,
188                 NULL,
189                 "new",
190                 "(Ljava/lang/Class;)Ljava/lang/Object;",
191                 NULL,
192                 NULL,
193                 NULL,
194                 false,
195                 NULL
196         },
197         {
198                 ICMD_ANEWARRAY,
199                 BUILTIN_newarray,
200                 NULL,
201                 "newarray",
202         "(ILjava/lang/Class;)[Ljava/lang/Object;",
203                 NULL,
204                 NULL,
205                 NULL,
206                 false,
207                 NULL
208         },
209         {
210                 ICMD_NEWARRAY,
211                 BUILTIN_newarray_boolean,
212                 NULL,
213                 "newarray_boolean",
214                 "(I)[Z",
215                 NULL,
216                 NULL,
217                 NULL,
218                 false,
219                 NULL
220         },
221         {
222                 ICMD_NEWARRAY,
223                 BUILTIN_newarray_byte,
224                 NULL,
225                 "newarray_byte",
226                 "(I)[B",
227                 NULL,
228                 NULL,
229                 NULL,
230                 false,
231                 NULL
232         },
233         {
234                 ICMD_NEWARRAY,
235                 BUILTIN_newarray_char,
236                 NULL,
237                 "newarray_char",
238                 "(I)[C",
239                 NULL,
240                 NULL,
241                 NULL,
242                 false,
243                 NULL
244         },
245         {
246                 ICMD_NEWARRAY,
247                 BUILTIN_newarray_short,
248                 NULL,
249                 "newarray_short",
250                 "(I)[S",
251                 NULL,
252                 NULL,
253                 NULL,
254                 false,
255                 NULL
256         },
257         {
258                 ICMD_NEWARRAY,
259                 BUILTIN_newarray_int,
260                 NULL,
261                 "newarray_int",
262                 "(I)[I",
263                 NULL,
264                 NULL,
265                 NULL,
266                 false,
267                 NULL
268         },
269         {
270                 ICMD_NEWARRAY,
271                 BUILTIN_newarray_long,
272                 NULL,
273                 "newarray_long",
274                 "(I)[J",
275                 NULL,
276                 NULL,
277                 NULL,
278                 false,
279                 NULL
280         },
281         {
282                 ICMD_NEWARRAY,
283                 BUILTIN_newarray_float,
284                 NULL,
285                 "newarray_float",
286                 "(I)[F",
287                 NULL,
288                 NULL,
289                 NULL,
290                 false,
291                 NULL
292         },
293         {
294                 ICMD_NEWARRAY,
295                 BUILTIN_newarray_double,
296                 NULL,
297                 "newarray_double",
298                 "(I)[D",
299                 NULL,
300                 NULL,
301                 NULL,
302                 false,
303                 NULL
304         },
305         {
306                 ICMD_CHECKCAST,
307                 BUILTIN_arraycheckcast,
308                 NULL,
309                 "arraycheckcast",
310                 "([Ljava/lang/Object;[Ljava/lang/Object;)[Ljava/lang/Object;",
311                 NULL,
312                 NULL,
313                 NULL,
314                 false,
315                 NULL
316         },
317         {
318                 ICMD_INSTANCEOF,
319                 BUILTIN_arrayinstanceof,
320                 NULL,
321                 "arrayinstanceof",
322                 "([Ljava/lang/Object;[Ljava/lang/Object;)I",
323                 NULL,
324                 NULL,
325                 NULL,
326                 false,
327                 NULL
328         },
329         {
330                 ICMD_AASTORE,
331                 BUILTIN_canstore,
332                 NULL,
333                 "canstore",
334                 "([Ljava/lang/Object;Ljava/lang/Object;)I",
335                 NULL,
336                 NULL,
337                 NULL,
338                 false,
339                 NULL
340         },
341
342 #if defined(ENABLE_THREADS)
343         {
344                 ICMD_MONITORENTER,
345                 LOCK_monitor_enter,
346                 NULL,
347                 "monitorenter",
348                 "(Ljava/lang/Object;)V",
349                 NULL,
350                 NULL,
351                 NULL,
352                 false,
353                 NULL
354         },
355         {
356                 ICMD_MONITOREXIT,
357                 LOCK_monitor_exit,
358                 NULL,
359                 "monitorexit",
360                 "(Ljava/lang/Object;)V",
361                 NULL,
362                 NULL,
363                 NULL,
364                 false,
365                 NULL
366         },
367 #endif
368
369
370         /* stop entry */
371
372         {
373                 255,
374                 NULL,
375                 NULL,
376                 NULL,
377                 NULL,
378                 NULL,
379                 NULL,
380                 NULL,
381                 false,
382                 NULL
383         },
384 };
385
386
387 /* automatically replaced functions *******************************************/
388
389 static builtintable_entry builtintable_automatic[] = {
390
391 #if !(SUPPORT_LONG && SUPPORT_LONG_CMP)
392         {
393                 ICMD_LCMP,
394                 BUILTIN_lcmp,
395                 NULL,
396                 "lcmp",
397                 "(JJ)I",
398                 NULL,
399                 NULL,
400                 NULL,
401                 false,
402                 NULL
403         },
404 #endif
405
406 #if !(SUPPORT_LONG && SUPPORT_LONG_LOGICAL)
407         {
408                 ICMD_LAND,
409                 BUILTIN_land,
410                 NULL,
411                 "land",
412                 "(JJ)J",
413                 NULL,
414                 NULL,
415                 NULL,
416                 false,
417                 NULL
418         },
419         {
420                 ICMD_LOR,
421                 BUILTIN_lor,
422                 NULL,
423                 "lor",
424                 "(JJ)J",
425                 NULL,
426                 NULL,
427                 NULL,
428                 false,
429                 NULL
430         },
431         {
432                 ICMD_LXOR,
433                 BUILTIN_lxor,
434                 NULL,
435                 "lxor",
436                 "(JJ)J",
437                 NULL,
438                 NULL,
439                 NULL,
440                 false,
441                 NULL
442         },
443 #endif /* !(SUPPORT_LONG && SUPPORT_LONG_LOGICAL) */
444
445 #if !(SUPPORT_LONG && SUPPORT_LONG_SHIFT)
446         {
447                 ICMD_LSHL,
448                 BUILTIN_lshl,
449                 NULL,
450                 "lshl",
451                 "(JI)J",
452                 NULL,
453                 NULL,
454                 NULL,
455                 false,
456                 NULL
457         },
458         {
459                 ICMD_LSHR,
460                 BUILTIN_lshr,
461                 NULL,
462                 "lshr",
463                 "(JI)J",
464                 NULL,
465                 NULL,
466                 NULL,
467                 false,
468                 NULL
469         },
470         {
471                 ICMD_LUSHR,
472                 BUILTIN_lushr,
473                 NULL,
474                 "lushr",
475                 "(JI)J",
476                 NULL,
477                 NULL,
478                 NULL,
479                 false,
480                 NULL
481         },
482 #endif /* !(SUPPORT_LONG && SUPPORT_LONG_SHIFT) */
483
484 #if !(SUPPORT_LONG && SUPPORT_LONG_ADD)
485         {
486                 ICMD_LADD,
487                 BUILTIN_ladd,
488                 NULL,
489                 "ladd",
490                 "(JJ)J",
491                 NULL,
492                 NULL,
493                 NULL,
494                 false,
495                 NULL
496         },
497         {
498                 ICMD_LSUB,
499                 BUILTIN_lsub,
500                 NULL,
501                 "lsub",
502                 "(JJ)J",
503                 NULL,
504                 NULL,
505                 NULL,
506                 false,
507                 NULL
508         },
509         {
510                 ICMD_LNEG,
511                 BUILTIN_lneg,
512                 NULL,
513                 "lneg",
514                 "(J)J",
515                 NULL,
516                 NULL,
517                 NULL,
518                 false,
519                 NULL
520         },
521 #endif /* !(SUPPORT_LONG && SUPPORT_LONG_ADD) */
522
523 #if !(SUPPORT_LONG && SUPPORT_LONG_MUL)
524         {
525                 ICMD_LMUL,
526                 BUILTIN_lmul,
527                 NULL,
528                 "lmul",
529                 "(JJ)J",
530                 NULL,
531                 NULL,
532                 NULL,
533                 false,
534                 NULL
535         },
536 #endif
537
538 #if !(SUPPORT_FLOAT && SUPPORT_I2F)
539         {
540                 ICMD_I2F,
541                 BUILTIN_i2f,
542                 NULL,
543                 "i2f",
544                 "(I)F",
545                 NULL,
546                 NULL,
547                 NULL,
548                 false,
549                 NULL
550         },
551 #endif
552
553 #if !(SUPPORT_DOUBLE && SUPPORT_I2D)
554         {
555                 ICMD_I2D,
556                 BUILTIN_i2d,
557                 NULL,
558                 "i2d",
559                 "(I)D",
560                 NULL,
561                 NULL,
562                 NULL,
563                 false,
564                 NULL
565         },
566 #endif
567
568 #if !(SUPPORT_LONG && SUPPORT_FLOAT && SUPPORT_L2F)
569         {
570                 ICMD_L2F,
571                 BUILTIN_l2f,
572                 NULL,
573                 "l2f",
574                 "(J)F",
575                 NULL,
576                 NULL,
577                 NULL,
578                 false,
579                 NULL
580         },
581 #endif
582
583 #if !(SUPPORT_LONG && SUPPORT_DOUBLE && SUPPORT_L2D)
584         {
585                 ICMD_L2D,
586                 BUILTIN_l2d,
587                 NULL,
588                 "l2d",
589                 "(J)D",
590                 NULL,
591                 NULL,
592                 NULL,
593                 false,
594                 NULL
595         },
596 #endif
597
598 #if !(SUPPORT_FLOAT && SUPPORT_F2I)
599         {
600                 ICMD_F2I,
601                 BUILTIN_f2i,
602                 NULL,
603                 "f2i",
604                 "(F)I",
605                 NULL,
606                 NULL,
607                 NULL,
608                 false,
609                 NULL
610         },
611 #endif
612
613 #if !(SUPPORT_FLOAT && SUPPORT_LONG && SUPPORT_F2L)
614         {
615                 ICMD_F2L,
616                 BUILTIN_f2l,
617                 NULL,
618                 "f2l",
619                 "(F)J",
620                 NULL,
621                 NULL,
622                 NULL,
623                 false,
624                 NULL
625         },
626 #endif
627
628 #if !(SUPPORT_DOUBLE && SUPPORT_D2I)
629         {
630                 ICMD_D2I,
631                 BUILTIN_d2i,
632                 NULL,
633                 "d2i",
634                 "(D)I",
635                 NULL,
636                 NULL,
637                 NULL,
638                 false,
639                 NULL
640         },
641 #endif
642
643 #if !(SUPPORT_DOUBLE && SUPPORT_LONG && SUPPORT_D2L)
644         {
645                 ICMD_D2L,
646                 BUILTIN_d2l,
647                 NULL,
648                 "d2l",
649                 "(D)J",
650                 NULL,
651                 NULL,
652                 NULL,
653                 false,
654                 NULL
655         },
656 #endif
657
658
659         /* float functions ********************************************************/
660
661 #if !SUPPORT_FLOAT
662         {
663                 ICMD_FADD,
664                 BUILTIN_fadd,
665                 NULL,
666                 "fadd",
667                 "(FF)F",
668                 NULL,
669                 NULL,
670                 NULL,
671                 false,
672                 NULL
673         },
674         {
675                 ICMD_FSUB,
676                 BUILTIN_fsub,
677                 NULL,
678                 "fsub",
679                 "(FF)F",
680                 NULL,
681                 NULL,
682                 NULL,
683                 false,
684                 NULL
685         },
686         {
687                 ICMD_FMUL,
688                 BUILTIN_fmul,
689                 NULL,
690                 "fmul",
691                 "(FF)F",
692                 NULL,
693                 NULL,
694                 NULL,
695                 false,
696                 NULL
697         },
698         {
699                 ICMD_FDIV,
700                 BUILTIN_fdiv,
701                 NULL,
702                 "fdiv",
703                 "(FF)F",
704                 NULL,
705                 NULL,
706                 NULL,
707                 false,
708                 NULL
709         },
710         {
711                 ICMD_FNEG,
712                 BUILTIN_fneg,
713                 NULL,
714                 "fneg",
715                 "(F)F",
716                 NULL,
717                 NULL,
718                 NULL,
719                 false,
720                 NULL
721         },
722         {
723                 ICMD_FCMPL,
724                 BUILTIN_fcmpl,
725                 NULL,
726                 "fcmpl",
727                 "(FF)I",
728                 NULL,
729                 NULL,
730                 NULL,
731                 false,
732                 NULL
733         },
734         {
735                 ICMD_FCMPG,
736                 BUILTIN_fcmpg,
737                 NULL,
738                 "fcmpg",
739                 "(FF)I",
740                 NULL,
741                 NULL,
742                 NULL,
743                 false,
744                 NULL
745         },
746 #endif /* !SUPPORT_FLOAT */
747
748
749         /* double functions *******************************************************/
750
751 #if !SUPPORT_DOUBLE
752         {
753                 ICMD_DADD,
754                 BUILTIN_dadd,
755                 NULL,
756                 "dadd",
757                 "(DD)D",
758                 NULL,
759                 NULL,
760                 NULL,
761                 false,
762                 NULL
763         },
764         {
765                 ICMD_DSUB,
766                 BUILTIN_dsub,
767                 NULL,
768                 "dsub",
769                 "(DD)D",
770                 NULL,
771                 NULL,
772                 NULL,
773                 false,
774                 NULL
775         },
776         {
777                 ICMD_DMUL,
778                 BUILTIN_dmul,
779                 NULL,
780                 "dmul",
781                 "(DD)D",
782                 NULL,
783                 NULL,
784                 NULL,
785                 false,
786                 NULL
787         },
788         {
789                 ICMD_DDIV,
790                 BUILTIN_ddiv,
791                 NULL,
792                 "ddiv",
793                 "(DD)D",
794                 NULL,
795                 NULL,
796                 NULL,
797                 false,
798                 NULL
799         },
800         {
801                 ICMD_DNEG,
802                 BUILTIN_dneg,
803                 NULL,
804                 "dneg",
805                 "(D)D",
806                 NULL,
807                 NULL,
808                 NULL,
809                 false,
810                 NULL
811         },
812         {
813                 ICMD_DCMPL,
814                 BUILTIN_dcmpl,
815                 NULL,
816                 "dcmpl",
817                 "(DD)I",
818                 NULL,
819                 NULL,
820                 NULL,
821                 false,
822                 NULL
823         },
824         {
825                 ICMD_DCMPG,
826                 BUILTIN_dcmpg,
827                 NULL,
828                 "dcmpg",
829                 "(DD)I",
830                 NULL,
831                 NULL,
832                 NULL,
833                 false,
834                 NULL
835         },
836 #endif /* !SUPPORT_DOUBLE */
837
838
839         /* float/double functions *************************************************/
840
841 #if !(SUPPORT_FLOAT && SUPPORT_DOUBLE)
842         {
843                 ICMD_F2D,
844                 BUILTIN_f2d,
845                 NULL,
846                 "f2d",
847                 "(F)D",
848                 NULL,
849                 NULL,
850                 NULL,
851                 false,
852                 NULL
853         },
854         {
855                 ICMD_D2F,
856                 BUILTIN_d2f,
857                 NULL,
858                 "d2f",
859                 "(D)F",
860                 NULL,
861                 NULL,
862                 NULL,
863                 false,
864                 NULL
865         },
866 #endif /* !(SUPPORT_FLOAT && SUPPORT_DOUBLE) */
867
868
869         /* prevent a compiler warning if everything is supported (e.g. i386) */
870
871         {
872                 255,
873                 NULL,
874                 NULL,
875                 NULL,
876                 NULL,
877                 NULL,
878                 NULL,
879                 NULL,
880                 false,
881                 NULL
882         },
883 };
884
885
886 /* automatically replaced functions *******************************************/
887
888 static builtintable_entry builtintable_function[] = {
889
890         /* java.lang.VMSystem.arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V STATIC NATIVE */
891
892         {
893                 ICMD_BUILTIN,
894                 BUILTIN_arraycopy,
895                 "java/lang/VMSystem",
896                 "arraycopy",
897                 "(Ljava/lang/Object;ILjava/lang/Object;II)V",
898                 NULL,
899                 NULL,
900                 NULL,
901                 true,
902                 NULL
903         },
904
905         /* java.lang.System.arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V PUBLIC STATIC */
906
907 #if 0
908         /* We disable this one until we have a fix for the stacktrace
909            issue. */
910
911         {
912                 ICMD_BUILTIN,
913                 BUILTIN_arraycopy,
914                 "java/lang/System",
915                 "arraycopy",
916                 "(Ljava/lang/Object;ILjava/lang/Object;II)V",
917                 NULL,
918                 NULL,
919                 NULL,
920                 true,
921                 NULL
922         },
923 #endif
924
925         /* java.lang.VMSystem.currentTimeMillis()J PUBLIC STATIC */
926
927         {
928                 ICMD_BUILTIN,
929                 BUILTIN_currenttimemillis,
930                 "java/lang/VMSystem",
931                 "currentTimeMillis",
932                 "()J",
933                 NULL,
934                 NULL,
935                 NULL,
936                 false,
937                 NULL
938         },
939
940         /* java.lang.System.currentTimeMillis()J PUBLIC STATIC */
941
942         {
943                 ICMD_BUILTIN,
944                 BUILTIN_currenttimemillis,
945                 "java/lang/System",
946                 "currentTimeMillis",
947                 "()J",
948                 NULL,
949                 NULL,
950                 NULL,
951                 false,
952                 NULL
953         },
954
955         /* stop entry */
956
957         {
958                 255,
959                 NULL,
960                 NULL,
961                 NULL,
962                 NULL,
963                 NULL,
964                 NULL,
965                 NULL,
966                 false,
967                 NULL
968         },
969 };
970
971
972 /*
973  * These are local overrides for various environment variables in Emacs.
974  * Please do not remove this and leave it at the end of the file, where
975  * Emacs will automagically detect them.
976  * ---------------------------------------------------------------------
977  * Local variables:
978  * mode: c
979  * indent-tabs-mode: t
980  * c-basic-offset: 4
981  * tab-width: 4
982  * End:
983  */