diff -r 504ecb55d39e pypy/jit/backend/ppc/ppcgen/ppc_assembler.py --- a/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py Tue Aug 02 14:32:35 2011 +0200 +++ b/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py Sun Aug 07 16:41:11 2011 -0400 @@ -21,6 +21,7 @@ SC = Form("AA") # fudge DD = Form("rD", "rA", "SIMM") +DDO = Form("rD", "rA", "ds", "XO4") DS = Form("rA", "rS", "UIMM") X = Form("XO1") @@ -42,6 +43,8 @@ MI = Form("rA", "rS", "SH", "MB", "ME", "Rc") MB = Form("rA", "rS", "rB", "MB", "ME", "Rc") +MDI = Form("rA", "rS", "SH", "mbe", "XO5", "sh", "Rc") +MDS = Form("rA", "rS", "rB", "mbe", "XO5", "Rc") class BasicPPCAssembler(Assembler): @@ -99,6 +102,8 @@ lbz = DD(34) lbzu = DD(35) + ld = DDO(58, XO4=0) + ldu = DDO(58, XO4=1) lfd = DD(50) lfdu = DD(51) lfs = DD(48) @@ -108,6 +113,7 @@ lhz = DD(40) lhzu = DD(41) lmw = DD(46) + lwa = DDO(58, XO4=2) lwz = DD(32) lwzu = DD(33) @@ -117,6 +123,8 @@ stb = DD(38) stbu = DD(39) + std = DDO(62, XO4=0) + stdu = DDO(62, XO4=1) stfd = DD(54) stfdu = DD(55) stfs = DD(52) @@ -128,6 +136,7 @@ stwu = DD(37) subfic = DD(8) + tdi = Form("TO", "rA", "SIMM")(2) twi = Form("TO", "rA", "SIMM")(3) xori = DS(26) xoris = DS(27) @@ -146,6 +155,8 @@ cmpl = Form("crfD", "L", "rA", "rB", "XO1")(31, XO1=32) cmpl.default(L=0).default(crfD=0) + cntlzd = XS0(31, XO1=58, Rc=0) + cntlzdx = XS0(31, XO1=58, Rc=1) cntlzw = XS0(31, XO1=26, Rc=0) cntlzwx = XS0(31, XO1=26, Rc=1) @@ -171,17 +182,29 @@ extsh = XS0(31, XO1=922, Rc=0) extshx = XS0(31, XO1=922, Rc=1) + extsw = XS0(31, XO1=986, Rc=0) + extswx = XS0(31, XO1=986, Rc=1) + fabs = XDB(63, XO1=264, Rc=0) fabsx = XDB(63, XO1=264, Rc=1) fcmpo = XcAB(63, XO1=32) fcmpu = XcAB(63, XO1=0) + fcfid = XDB(63, XO1=846, Rc=0) + fcfidx = XDB(63, XO1=846, Rc=1) + + fctid = XDB(63, XO1=814, Rc=0) + fctidx = XDB(63, XO1=814, Rc=1) + + fctidz = XDB(63, XO1=815, Rc=0) + fctidzx = XDB(63, XO1=815, Rc=1) + fctiw = XDB(63, XO1=14, Rc=0) fctiwx = XDB(63, XO1=14, Rc=1) - fctiwz = XDB(63, XO1=14, Rc=0) - fctiwzx = XDB(63, XO1=14, Rc=1) + fctiwz = XDB(63, XO1=15, Rc=0) + fctiwzx = XDB(63, XO1=15, Rc=1) fmr = XDB(63, XO1=72, Rc=0) fmrx = XDB(63, XO1=72, Rc=1) @@ -201,6 +224,9 @@ lbzux = XD(31, XO1=119) lbzx = XD(31, XO1=87) + ldarx = XD(31, XO1=84) + ldux = XD(31, XO1=53) + ldx = XD(31, XO1=21) lfdux = XD(31, XO1=631) lfdx = XD(31, XO1=599) lfsux = XD(31, XO1=567) @@ -213,6 +239,8 @@ lswi = XD(31, XO1=597) lswx = XD(31, XO1=533) lwarx = XD(31, XO1=20) + lwaux = XD(31, XO1=373) + lwax = XD(31, XO1=341) lwbrx = XD(31, XO1=534) lwzux = XD(31, XO1=55) lwzx = XD(31, XO1=23) @@ -266,6 +294,16 @@ crorc = XL(19, XO1=417) crxor = XL(19, XO1=193) + divd = XO(31, XO2=489, OE=0, Rc=0) + divdx = XO(31, XO2=489, OE=0, Rc=1) + divdo = XO(31, XO2=489, OE=1, Rc=0) + divdox = XO(31, XO2=489, OE=1, Rc=1) + + divdu = XO(31, XO2=457, OE=0, Rc=0) + divdux = XO(31, XO2=457, OE=0, Rc=1) + divduo = XO(31, XO2=457, OE=1, Rc=0) + divduox = XO(31, XO2=457, OE=1, Rc=1) + divw = XO(31, XO2=491, OE=0, Rc=0) divwx = XO(31, XO2=491, OE=0, Rc=1) divwo = XO(31, XO2=491, OE=1, Rc=0) @@ -360,6 +398,17 @@ mtsr = Form("rS", "SR", "XO1")(31, XO1=210) mtsrin = Form("rS", "rB", "XO1")(31, XO1=242) + mulhd = XO(31, OE=0, XO2=73, Rc=0) + mulhdx = XO(31, OE=0, XO2=73, Rc=1) + + mulhdu = XO(31, OE=0, XO2=9, Rc=0) + mulhdux = XO(31, OE=0, XO2=9, Rc=1) + + mulld = XO(31, OE=0, XO2=233, Rc=0) + mulldx = XO(31, OE=0, XO2=233, Rc=1) + mulldo = XO(31, OE=1, XO2=233, Rc=0) + mulldox = XO(31, OE=1, XO2=233, Rc=1) + mulhw = XO(31, OE=0, XO2=75, Rc=0) mulhwx = XO(31, OE=0, XO2=75, Rc=1) @@ -389,6 +438,21 @@ orcx = XS(31, XO1=412, Rc=1) rfi = X(19, XO1=50) + rfid = X(19, XO1=18) + + rldcl = MDS(30, XO5=8, Rc=0) + rldclx = MDS(30, XO5=8, Rc=1) + rldcr = MDS(30, XO5=9, Rc=0) + rldcrx = MDS(30, XO5=9, Rc=1) + + rldic = MDI(30, XO5=2, Rc=0) + rldicx = MDI(30, XO5=2, Rc=1) + rldicl = MDI(30, XO5=0, Rc=0) + rldiclx = MDI(30, XO5=0, Rc=1) + rldicr = MDI(30, XO5=1, Rc=0) + rldicrx = MDI(30, XO5=1, Rc=1) + rldimi = MDI(30, XO5=3, Rc=0) + rldimix = MDI(30, XO5=3, Rc=1) rlwimi = MI(20, Rc=0) rlwimix = MI(20, Rc=1) @@ -399,9 +463,18 @@ rlwnm = MB(23, Rc=0) rlwnmx = MB(23, Rc=1) + sld = XS(31, XO1=27, Rc=0) + sldx = XS(31, XO1=27, Rc=1) + slw = XS(31, XO1=24, Rc=0) slwx = XS(31, XO1=24, Rc=1) + srad = XS(31, XO1=794, Rc=0) + sradx = XS(31, XO1=794, Rc=1) + + sradi = Form("rA", "rS", "SH", "XO6", "sh", "Rc")(31, XO6=413, Rc=0) + sradix = Form("rA", "rS", "SH", "XO6", "sh", "Rc")(31, XO6=413, Rc=1) + sraw = XS(31, XO1=792, Rc=0) srawx = XS(31, XO1=792, Rc=1) @@ -413,6 +486,9 @@ stbux = XSO(31, XO1=247) stbx = XSO(31, XO1=215) + stdcxx = Form("rS", "rA", "rB", "XO1", "Rc")(31, XO1=214, Rc=1) + stdux = XSO(31, XO1=181) + stdx = XSO(31, XO1=149) stfdux = XSO(31, XO1=759) stfdx = XSO(31, XO1=727) stfiwx = XSO(31, XO1=983) @@ -459,6 +535,7 @@ tlbie = Form("rB", "XO1")(31, XO1=306) tlbsync = X(31, XO1=566) + td = Form("TO", "rA", "rB", "XO1")(31, XO1=68) tw = Form("TO", "rA", "rB", "XO1")(31, XO1=4) xor = XS(31, XO1=316, Rc=0) diff -r 504ecb55d39e pypy/jit/backend/ppc/ppcgen/ppc_field.py --- a/pypy/jit/backend/ppc/ppcgen/ppc_field.py Tue Aug 02 14:32:35 2011 +0200 +++ b/pypy/jit/backend/ppc/ppcgen/ppc_field.py Sun Aug 07 16:41:11 2011 -0400 @@ -15,6 +15,7 @@ "crfS": (11, 13), "CRM": (12, 19), "d": (16, 31, 'signed'), + "ds": (16, 29, 'signed'), "FM": ( 7, 14), "frA": (11, 15, 'unsigned', regname._F), "frB": (16, 20, 'unsigned', regname._F), @@ -27,6 +28,7 @@ "LK": (31, 31), "MB": (21, 25), "ME": (26, 30), + "mbe": (21, 26), "NB": (16, 20), "OE": (21, 21), "rA": (11, 15, 'unsigned', regname._R), @@ -35,6 +37,7 @@ "rD": ( 6, 10, 'unsigned', regname._R), "rS": ( 6, 10, 'unsigned', regname._R), "SH": (16, 20), + "sh": (30, 30), "SIMM": (16, 31, 'signed'), "SR": (12, 15), "spr": (11, 20), @@ -43,6 +46,9 @@ "XO1": (21, 30), "XO2": (22, 30), "XO3": (26, 30), + "XO4": (30, 31), + "XO5": (27, 29), + "XO6": (21, 29), }