Commit Graph

125 Commits

Author SHA1 Message Date
nickysn
1e8b192b3d * support far references in second_cmp32bit for i8086
git-svn-id: trunk@24736 -
2013-06-01 17:51:18 +00:00
nickysn
e243b6b869 * never use the 66h prefix when pushing/popping segment registers on i8086, as the stack is aligned on 2 bytes there
git-svn-id: trunk@24729 -
2013-06-01 16:03:14 +00:00
nickysn
c2e3fb5918 + emit proper interrupt procedure entry/exit code on i8086
git-svn-id: trunk@24728 -
2013-06-01 15:50:11 +00:00
nickysn
10b3ce1ba5 * fixed an opsize bug in ti8086addnode.second_add64bit, which caused 32-bit instructions to be emitted
git-svn-id: trunk@24670 -
2013-05-31 17:13:38 +00:00
nickysn
c271594b4f + optimized implementation of 32-bit OP_SHL,OP_SHR and OP_SAR in tcg8086.a_op_const_reg
git-svn-id: trunk@24660 -
2013-05-31 11:03:36 +00:00
nickysn
125a6a8720 * register id of (e)flags changed, so it doesn't overlap with dr0
git-svn-id: trunk@24647 -
2013-05-30 16:40:59 +00:00
nickysn
06838be452 * fixed bug when passing a 'single' floating point type parameter via tcg8086.a_load_ref_cgpara
git-svn-id: trunk@24592 -
2013-05-25 13:37:24 +00:00
nickysn
27adafeecb + support moving from a shorter unsigned (sign extension not yet implemented) to a longer type in tcg8086.a_load_reg_ref
git-svn-id: trunk@24589 -
2013-05-25 12:05:02 +00:00
nickysn
3aeea835f9 + int register in treference.segment support in tcg8086.op_*ref*
git-svn-id: trunk@24586 -
2013-05-24 19:57:02 +00:00
florian
c1a1325a72 * reduce register pressure by allocating/deallocating registers as late/early as possible
git-svn-id: trunk@24581 -
2013-05-24 18:09:15 +00:00
nickysn
a308994423 * i8086 specific code from tcgpointerconstnode.pass_generate_code moved to an i8086 specific overriden method
git-svn-id: trunk@24577 -
2013-05-24 17:16:55 +00:00
nickysn
8b1e621665 * segment in int register support added also to tcg8086.a_load_reg_ref and .a_load_ref_reg
git-svn-id: trunk@24570 -
2013-05-24 14:46:40 +00:00
nickysn
9171c19601 * support int register in treference.segment in tcg8086.a_load_const_ref; this fixes farptr^:=const
git-svn-id: trunk@24569 -
2013-05-24 13:36:22 +00:00
nickysn
fd429612f8 + initial (and not yet fully complete) implementation of far pointers on the i8086
git-svn-id: trunk@24553 -
2013-05-22 16:26:33 +00:00
nickysn
ecb5a4866d * refactored the int64 result passing in ax:bx:cx:dx to use 4 paralocs, instead of the GetNextReg hack
git-svn-id: trunk@24527 -
2013-05-19 12:50:15 +00:00
nickysn
3665ed4b03 + enabled returning int64 in ax:bx:cx:dx for the i8086
git-svn-id: trunk@24502 -
2013-05-14 22:45:57 +00:00
nickysn
d433408a7d -rm BX from i8086's saved_stadard_registers array, as it interferes with returning int64 in ax:bx:cx:dx and it shouldn't be saved anyway
git-svn-id: trunk@24501 -
2013-05-14 22:32:02 +00:00
nickysn
8fea00d8f5 - rm NR_PIC_OFFSET_REG from i8086/cpubase.inc, because it isn't used (and shouldn't be used) on the i8086
git-svn-id: trunk@24500 -
2013-05-14 22:22:24 +00:00
nickysn
2557382815 - rm tcg8086.g_maybe_got_init as it's of no use for the i8086
git-svn-id: trunk@24499 -
2013-05-14 22:20:04 +00:00
nickysn
6b2f59c3e0 + preparations for returning int64 in ax:bx:cx:dx on i8086
git-svn-id: trunk@24498 -
2013-05-14 22:19:17 +00:00
nickysn
c4dd85a0eb + implemented tcg8086.a_op_reg_ref
git-svn-id: trunk@24474 -
2013-05-08 11:49:39 +00:00
nickysn
85b98671bd + implemented tcg8086.a_op_const_ref for op_add/and/or/sub/xor/move/none; this fixes inc(longint) among other things
git-svn-id: trunk@24473 -
2013-05-08 08:23:46 +00:00
nickysn
2d67a3169d * i8086 fixes in tcg8086.g_copyvaluepara_openarray
git-svn-id: trunk@24467 -
2013-05-07 22:34:26 +00:00
nickysn
502c2ffb94 * fixed tcg8086.a_load_reg_reg when doing an unsigned extension in the same superregister; this fixes the taddbool test
git-svn-id: trunk@24466 -
2013-05-07 21:20:40 +00:00
nickysn
5a4a3cbbc3 + implemented tcg8086.a_op_ref_reg; supports op_add/sub/xor/or/and
git-svn-id: trunk@24464 -
2013-05-07 19:19:55 +00:00
nickysn
b0f7786782 + added support for special versions of near data pointers associated with a x86 segment register. They are supported on all x86 platforms: i8086, i386 and x86_64
git-svn-id: trunk@24453 -
2013-05-05 17:22:37 +00:00
nickysn
4527fe8fa2 + added 8086 workaround for the 'imul reg,const' 186+ instruction. The compiler can now generate strict 8086/8088 code.
git-svn-id: trunk@24404 -
2013-05-01 19:18:12 +00:00
florian
19c8abac0b + enable jump optimizer for i8086
git-svn-id: trunk@24400 -
2013-05-01 13:54:13 +00:00
nickysn
8fddb1361b * got rid of push const also in tcg8086.a_loadaddr_ref_cgpara
git-svn-id: trunk@24384 -
2013-04-29 23:13:09 +00:00
nickysn
cfc3c6ec5d - cleanup tcg8086.a_loadaddr_ref_cgpara from unused code left over from i386
git-svn-id: trunk@24383 -
2013-04-29 23:08:12 +00:00
nickysn
76e3dd5cef * do not generate push const on the i8086, go through a register instead, unless it's 186+
git-svn-id: trunk@24381 -
2013-04-29 22:29:26 +00:00
nickysn
06f1b6a4e8 * moved the i8086 'push const' instructions to a new method, so they can be abstracted on pre-186 processors
git-svn-id: trunk@24380 -
2013-04-29 21:53:55 +00:00
nickysn
7c0679efdb * use the 'leave' instruction on 80186+
git-svn-id: trunk@24378 -
2013-04-29 19:45:39 +00:00
nickysn
3853d06ac0 + added n8086cal.pas, based on n386cal.pas; this pulls in nx86cal.pas as well and fixes compilation of the system unit on i8086 after the merge of the i8086 branch to trunk
git-svn-id: trunk@24335 -
2013-04-26 20:19:57 +00:00
nickysn
28c05c1ed5 * document the fact that ti8086paramanager.getintparaloc allocates a 16-bit parameter, and not a 32-bit one
git-svn-id: branches/i8086@24255 -
2013-04-15 22:08:11 +00:00
nickysn
8ce2f0c56b - rm the i386 specific code from ti8086paramanager.ret_in_param
git-svn-id: branches/i8086@24239 -
2013-04-14 14:43:42 +00:00
nickysn
c916105db8 - rm ti8086procinfo.allocate_got_register as it isn't used on the i8086
git-svn-id: branches/i8086@24238 -
2013-04-14 14:35:51 +00:00
nickysn
97ca0fa323 - removed ti8086inlinenode.second_round_real, second_trunc_real and load_fpu_location as they mostly repeat the code in tx86inlinenode.load_fpu_location; tx86inlinenode.load_fpu_location adapted for i8086 instead
git-svn-id: branches/i8086@24237 -
2013-04-14 14:25:22 +00:00
nickysn
107a6f6552 * i8086 versions of i386*.inc and r386*.inc renamed to i8086*.inc and r8086*.inc
git-svn-id: branches/i8086@24232 -
2013-04-12 12:06:28 +00:00
nickysn
4d8adbf5ff + implemented Seg() for i8086 (small/tiny memory model)
git-svn-id: branches/i8086@24071 -
2013-03-30 13:04:58 +00:00
nickysn
af5614e52d * i8086 parameter alignment fixes
git-svn-id: branches/i8086@23978 -
2013-03-24 20:15:39 +00:00
nickysn
7b9fd7b9f4 * instruction size fixes in tcg8086.g_intf_wrapper
git-svn-id: branches/i8086@23925 -
2013-03-18 13:07:05 +00:00
nickysn
c4cee15481 * bug fix in tcg8086.a_load_reg_reg for loading larger register to a smaller one
git-svn-id: branches/i8086@23914 -
2013-03-18 01:03:37 +00:00
nickysn
43dba74a5c + implemented 64-bit shl and shr for i8086
git-svn-id: branches/i8086@23882 -
2013-03-17 02:11:25 +00:00
florian
636129ed8c * fix interface wrapper generation for i8086
git-svn-id: branches/i8086@23873 -
2013-03-16 19:57:36 +00:00
nickysn
5dd5add67a * proper implementation of ti8086addnode.second_cmp64bit
git-svn-id: branches/i8086@23871 -
2013-03-16 19:01:15 +00:00
nickysn
56d2830beb + implemented 32-bit comparisons on the i8086
git-svn-id: branches/i8086@23870 -
2013-03-16 18:13:11 +00:00
florian
edd4c1ce4b * proper fix to avoid sp relative adressing as r23867 tries
git-svn-id: branches/i8086@23868 -
2013-03-16 16:51:31 +00:00
nickysn
01106a0968 * support stack relative addresses in a_loadfpu_reg_ref on the i8086
git-svn-id: branches/i8086@23867 -
2013-03-16 16:05:38 +00:00
nickysn
f4b5b4ce0f * implemented Trunc() and Round() for i8086
git-svn-id: branches/i8086@23852 -
2013-03-16 03:34:23 +00:00
nickysn
a66f7b61c6 * disable ret_in_param for floats, as they can be returned in a floating point register, and because enabling ret_in_param for them screws up badly the internprocs that handle floats
git-svn-id: branches/i8086@23840 -
2013-03-15 01:12:00 +00:00
nickysn
e95d22d0f8 + added ti8086inlinenode
git-svn-id: branches/i8086@23833 -
2013-03-14 15:15:32 +00:00
nickysn
44ce37369e * support 32-bit parameters that have a pair of two 16-bit locations in tcg8086.a_load_reg_cgpara
git-svn-id: branches/i8086@23825 -
2013-03-14 13:07:06 +00:00
nickysn
e956ffc27b * bug fix in the 32-bit parameters handling in tcg8086.a_load_const_cgpara
git-svn-id: branches/i8086@23824 -
2013-03-14 12:19:06 +00:00
nickysn
c438f3b53a * 386 changed to 8086 in various class names and comments
git-svn-id: branches/i8086@23813 -
2013-03-12 23:22:52 +00:00
nickysn
ea282ab4b3 * many int64 fixes
git-svn-id: branches/i8086@23812 -
2013-03-12 23:18:36 +00:00
nickysn
79f43c22e9 * fixed passing of int64 constants as parameters
git-svn-id: branches/i8086@23811 -
2013-03-12 18:04:38 +00:00
nickysn
d0c43f50f0 * fixed ti8086addnode.second_add64bit
git-svn-id: branches/i8086@23809 -
2013-03-12 16:25:44 +00:00
nickysn
8645d8e6cb * fixed implementation of a_op64_reg_reg for i8086
git-svn-id: branches/i8086@23808 -
2013-03-12 16:24:28 +00:00
nickysn
4ea86a445e * fixed functions returning int64 on i8086
git-svn-id: branches/i8086@23807 -
2013-03-12 15:09:24 +00:00
nickysn
19cbff220e + added unit n8086mat, based on n386mat; TODO: adapt to i8086
git-svn-id: branches/i8086@23805 -
2013-03-12 14:30:26 +00:00
nickysn
8d2b7df6d6 * fixed functions returning longint on i8086
git-svn-id: branches/i8086@23803 -
2013-03-12 13:35:19 +00:00
nickysn
2872fb95b5 * i8086 multiplication fixes; 16-bit multiplication now works; 32-bit still doesn't
git-svn-id: branches/i8086@23795 -
2013-03-11 22:31:17 +00:00
nickysn
ee005a9c1b - rm forgotten debug writeln
git-svn-id: branches/i8086@23792 -
2013-03-11 20:41:09 +00:00
nickysn
78cf362a90 * fixed passing of constant longint parameters
git-svn-id: branches/i8086@23788 -
2013-03-11 01:08:59 +00:00
florian
b321f867c6 + trgintcpu.add_cpu_interferences for i8086 so references are properly build
* empty make_simple_ref code path for i8086

git-svn-id: branches/i8086@23782 -
2013-03-10 18:51:42 +00:00
nickysn
7d883e7d52 implemented tcg8086.g_flags2reg and g_flags2ref
git-svn-id: branches/i8086@23764 -
2013-03-09 23:45:42 +00:00
nickysn
8d346d162b added n8086add.pas (copy of n386add.pas), TODO: adapt to i8086
git-svn-id: branches/i8086@23762 -
2013-03-09 23:17:23 +00:00
nickysn
e2ba9f14e1 initial implementation of tcg8086.a_op_const_reg; supports 32-bit add, sub, and, or, xor
git-svn-id: branches/i8086@23759 -
2013-03-09 21:07:43 +00:00
nickysn
1937ef8300 implemented OP_SHL, OP_SHR and OP_SAR in tcg8086.a_op_reg_reg
git-svn-id: branches/i8086@23751 -
2013-03-09 17:14:00 +00:00
nickysn
54d804d06e implemented tcg8086.a_op_reg_reg with support for 32-bit neg,not,add,sub,and,or and xor
git-svn-id: branches/i8086@23742 -
2013-03-09 12:28:48 +00:00
nickysn
a3295bd520 use ncgadd in cpunode
git-svn-id: branches/i8086@23736 -
2013-03-09 00:03:15 +00:00
nickysn
eff0894a66 all the extra i8086 units added
git-svn-id: branches/i8086@23718 -
2013-03-08 00:04:45 +00:00
nickysn
0684e783ae added the files autogenerated from x86ins.dat; TODO: these are shared with i386, so move them to a common directory
git-svn-id: branches/i8086@23717 -
2013-03-07 23:34:07 +00:00
nickysn
6fb9e3cfa5 the basic i8086 units: cpuinfo and cpubase
git-svn-id: branches/i8086@23716 -
2013-03-07 23:09:03 +00:00